科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Visual C#创建和使用ActiveX组件

Visual C#创建和使用ActiveX组件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

开发基于.Net平台上的程序员是很难从本质上把Visual C#和ActiveX组件联起来。

作者:阿虎 来源:天极开发 2007年11月12日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
¡¡9£® °ÑVisual Studio .NetµÄµ±Ç°´°¿ÚÇл»µ½¡¾MyControl.cs£¨Éè¼Æ£©¡¿´°¿Ú£¬²¢´Ó¡¾¹¤¾ßÏä¡¿Öеġ¾Windows´°Ìå×é¼þ¡¿Ñ¡ÏÖÐÍùÉè¼Æ´°ÌåÖа´Ë³ÐòÍÏÈëÏÂÁÐ×é¼þ£º

¡¡¡¡Ò»¸öGroupBox×é¼þ£¬²¢Ïò´Ë×é¼þÖÐÔÙÍÏÈ룬

¡¡¡¡Ò»¸öTextBox×é¼þºÍÒ»¸öLable×é¼þ¡£

¡¡¡¡10. °ÑVisual Studio .NetµÄµ±Ç°´°¿ÚÇл»µ½¡¾MyControl.cs¡¿´úÂë±à¼­´°¿Ú£¬²¢ÓÃÏÂÁдúÂëÌæ»»MyControl.csÖеÄInitializeComponent¹ý³Ì£¬ÏÂÁдúÂëÊdzõʼ»¯ÉÏÊö¼ÓÈëµÄ×é¼þ£º

private void InitializeComponent ( )
{
¡¡this.groupBox1 = new System.Windows.Forms.GroupBox ( ) ;
¡¡this.txtUserText = new System.Windows.Forms.TextBox ( ) ;
¡¡this.label1 = new System.Windows.Forms.Label ( ) ;
¡¡this.groupBox1.SuspendLayout ( ) ;
¡¡this.SuspendLayout ( ) ;
¡¡this.groupBox1.Controls.Add ( this.txtUserText ) ;
¡¡this.groupBox1.Controls.Add ( this.label1 ) ;
¡¡this.groupBox1.Location = new System.Drawing.Point ( 8 , 8 ) ;
¡¡this.groupBox1.Name = "groupBox1" ;
¡¡this.groupBox1.Size = new System.Drawing.Size ( 272 , 56 ) ;
¡¡this.groupBox1.TabIndex = 0 ;
¡¡this.groupBox1.TabStop = false ;
¡¡this.groupBox1.Text = "Visual Studio .Net´´½¨µÄActive X×é¼þ" ;
¡¡this.txtUserText.Enabled = false ;
¡¡this.txtUserText.Location = new System.Drawing.Point ( 84 , 20 ) ;
¡¡this.txtUserText.Name = "txtUserText" ;
¡¡this.txtUserText.Size = new System.Drawing.Size ( 180 , 21 ) ;
¡¡this.txtUserText.TabIndex = 1 ;
¡¡this.txtUserText.Text = "" ;
¡¡this.label1.Location = new System.Drawing.Point ( 8 , 24 ) ;
¡¡this.label1.Name = "label1" ;
¡¡this.label1.Size = new System.Drawing.Size ( 66 , 16 ) ;
¡¡this.label1.TabIndex = 0 ;
¡¡this.label1.Text = "ÊäÈëÐÅÏ¢£º" ;
¡¡this.Controls.Add ( this.groupBox1 ) ;
¡¡this.Name = "MyControl" ;
¡¡this.Size = new System.Drawing.Size ( 288 , 72 ) ;
¡¡this.groupBox1.ResumeLayout ( false ) ;
¡¡this.ResumeLayout ( false ) ;
}

¡¡¡¡ÖÁ´Ë¡¾ActiveXDotNet¡¿ÏîÄ¿´´½¨µÄActive X×é¼þµÄ½çÃæ¾Í»ù±¾Íê³ÉÁË£¬¾ßÌåÈçͼ03Ëùʾ£º


ͼ03£º¡¾ActiveXDotNet¡¿ÏîÄ¿´´½¨µÄActive X×é¼þµÄÉè¼Æ½çÃæ

¡¡¡¡11. ÔÚMyControl.csÖеġ¾MyControl µÄժҪ˵Ã÷¡¿´úÂëÇøÖÐÌí¼ÓÏÂÁдúÂ룬ÒÔÏ´úÂëÊǶ¨ÒåÒ»¸ö¹«ÓõĽӿڣ¬´Ë½Ó¿ÚÊǸæËßCOM/COM+£¬Õâ¶ùÓÐÒ»¸ö¹«ÓõÄÊôÐÔ¿ÉÒÔ½øÐжÁд²Ù×÷£º

public interface AxMyControl
{
¡¡String UserText { set ; get ; }
}

¡¡¡¡12. ÔÚMyControl.csµÄ¡¾MyControl¡¿class´úÂëÇøÖÐÌí¼ÓÏÂÁдúÂ룬ÒÔÏ´úÂëÊÇÊ×Ïȶ¨ÒåÒ»¸ö˽ÓеÄ×Ö·û´®£¬ÓôË×Ö·û´®À´±£´æ´ÓWeb²âÊÔÒ³ÃæÖд«µÝÀ´µÄÊýÖµ¶¨ÒåÒ»¸ö¹«ÓÃÊôÐÔ£¬ÔÚ½ÓÏÂÀ´µÄWeb²âÊÔÒ³ÃæÖУ¬½«Í¨¹ýÕâ¸öÊôÐÔÀ´´«µÝÊýÖµ£¬´ËÊôÐÔÊǿɶÁд£º

private String mStr_UserText ;
public String UserText
{
¡¡get { return mStr_UserText ; }
¡¡set
¡¡{
¡¡¡¡mStr_UserText = value ;
¡¡¡¡//ÐÞ¸Ä×é¼þµÄÊýÖµ
¡¡¡¡txtUserText.Text = value ;
¡¡}
}

¡¡¡¡13. ±£´æÉÏÃæµÄÐ޸IJ½Ö裬ÖÁ´ËÎÒÃǾÍÀûÓÃVisual C#´´½¨ÁËÒ»¸öÃû³ÆΪMyControlµÄclass£¬ÕâÒ²¾ÍÊÇÓÃVisual C#·â×°µÄ¡¢¿áËÆActive X×é¼þµÄ×é¼þ¡£

¡¡¡¡14. µ¥»÷¿ì½Ý¼ü¡¾Ctrl£«F5¡¿£¬ÔòVisual C#»á×Ô¶¯Íê³É±àÒ룬²¢ÔÚ"C:\Class\ActiveXDotNet\bin\Debug"Ŀ¼Éú³ÉÒ»¸öÃû³ÆΪ"ActiveXDotNet.dll"Îļþ£¬Õâ¾ÍÊDzúÉúµÄ×é¼þ¡£

¡¡¡¡ÒÔÏÂÊǾ­¹ýÉÏÊö²½Öè²úÉúµÄMyControl.csµÄÈ«²¿´úÂ룺

using System ;
using System.Collections ;
using System.ComponentModel ;
using System.Drawing ;
using System.Data ;
using System.Windows.Forms ;
namespace ActiveXDotNet
{
¡¡public interface AxMyControl
¡¡{
¡¡¡¡String UserText { set ; get ; }
¡¡}
¡¡/// £¼summary£¾
¡¡/// MyControl µÄժҪ˵Ã÷¡£
¡¡/// £¼/summary£¾
¡¡public class MyControl : System.Windows.Forms.UserControl , AxMyControl
¡¡{
¡¡¡¡/// £¼summary£¾
¡¡¡¡/// ±ØÐèµÄÉè¼ÆÆ÷±äÁ¿¡£
¡¡¡¡/// £¼/summary£¾
¡¡¡¡private System.ComponentModel.Container components = null ;
¡¡¡¡private System.Windows.Forms.GroupBox groupBox1 ;
¡¡¡¡private System.Windows.Forms.Label label1 ;
¡¡¡¡private System.Windows.Forms.TextBox txtUserText ;
¡¡¡¡private String mStr_UserText ;
¡¡¡¡public String UserText
¡¡¡¡{
¡¡¡¡¡¡get { return mStr_UserText ; }
¡¡¡¡¡¡set
¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡mStr_UserText = value ;
¡¡¡¡¡¡¡¡//ÐÞ¸Ä×é¼þµÄÊýÖµ
¡¡¡¡¡¡¡¡txtUserText.Text = value ;
¡¡¡¡¡¡}
¡¡¡¡}
¡¡¡¡public MyControl ( )
¡¡¡¡{
¡¡¡¡¡¡// ¸Ãµ÷ÓÃÊÇ Windows.Forms ´°ÌåÉè¼ÆÆ÷Ëù±ØÐèµÄ¡£
¡¡¡¡¡¡InitializeComponent ( ) ;

¡¡¡¡¡¡// TODO: ÔÚ InitializeComponent µ÷ÓúóÌí¼ÓÈκγõʼ»¯
¡¡¡¡}
¡¡¡¡/// £¼summary£¾
¡¡¡¡/// ÇåÀíËùÓÐÕýÔÚʹÓõÄ×ÊÔ´¡£
¡¡¡¡/// £¼/summary£¾
¡¡¡¡protected override void Dispose ( bool disposing )
¡¡¡¡{
¡¡¡¡¡¡if ( disposing )
¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡if ( components != null )
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡components.Dispose ( ) ;
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡}
¡¡¡¡¡¡base.Dispose ( disposing ) ;
¡¡¡¡}
¡¡¡¡#region ×é¼þÉè¼ÆÆ÷Éú³ÉµÄ´úÂë
¡¡¡¡/// £¼summary£¾
¡¡¡¡/// Éè¼ÆÆ÷Ö§³ÖËùÐèµÄ·½·¨ - ²»ÒªÊ¹ÓôúÂë±à¼­Æ÷
¡¡¡¡/// Ð޸Ĵ˷½·¨µÄÄÚÈÝ¡£
¡¡¡¡/// £¼/summary£¾
¡¡¡¡private void InitializeComponent ( )
¡¡¡¡{
¡¡¡¡¡¡this.groupBox1 = new System.Windows.Forms.GroupBox ( ) ;
¡¡¡¡¡¡this.txtUserText = new System.Windows.Forms.TextBox ( ) ;
¡¡¡¡¡¡this.label1 = new System.Windows.Forms.Label ( ) ;
¡¡¡¡¡¡this.groupBox1.SuspendLayout ( ) ;
¡¡¡¡¡¡this.SuspendLayout ( ) ;
¡¡¡¡¡¡this.groupBox1.Controls.Add ( this.txtUserText ) ;
¡¡¡¡¡¡this.groupBox1.Controls.Add ( this.label1 ) ;
¡¡¡¡¡¡this.groupBox1.Location = new System.Drawing.Point ( 8 , 8 ) ;
¡¡¡¡¡¡this.groupBox1.Name = "groupBox1" ;
¡¡¡¡¡¡this.groupBox1.Size = new System.Drawing.Size ( 272 , 56 ) ;
¡¡¡¡¡¡this.groupBox1.TabIndex = 0 ;
¡¡¡¡¡¡this.groupBox1.TabStop = false ;
¡¡¡¡¡¡this.groupBox1.Text = "Visual C#´´½¨µÄActive X×é¼þ" ;
¡¡¡¡¡¡this.txtUserText.Enabled = false ;
¡¡¡¡¡¡this.txtUserText.Location = new System.Drawing.Point ( 84 , 20 ) ;
¡¡¡¡¡¡this.txtUserText.Name = "txtUserText" ;
¡¡¡¡¡¡this.txtUserText.Size = new System.Drawing.Size ( 180 , 21 ) ;
¡¡¡¡¡¡this.txtUserText.TabIndex = 1 ;
¡¡¡¡¡¡this.txtUserText.Text = "" ;
¡¡¡¡¡¡this.label1.Location = new System.Drawing.Point ( 8 , 24 ) ;
¡¡¡¡¡¡this.label1.Name = "label1" ;
¡¡¡¡¡¡this.label1.Size = new System.Drawing.Size ( 66 , 16 ) ;
¡¡¡¡¡¡this.label1.TabIndex = 0 ;
¡¡¡¡¡¡this.label1.Text = "ÊäÈëÐÅÏ¢£º" ;
¡¡¡¡¡¡this.Controls.Add ( this.groupBox1 ) ;
¡¡¡¡¡¡this.Name = "MyControl" ;
¡¡¡¡¡¡this.Size = new System.Drawing.Size ( 288 , 72 ) ;
¡¡¡¡¡¡this.groupBox1.ResumeLayout ( false ) ;
¡¡¡¡¡¡this.ResumeLayout ( false ) ;
¡¡¡¡}
¡¡¡¡#endregion
¡¡}
}

四.Visual C#中使用刚封装的Active X组件:

  以下步骤就是通过Web页面的方式来测试上面创建组件:

  1. 创建一个名称为test.htm文件,MyControl就是放在此Web页面中加以测试的,此文件的内容如下:

<html>
<body color = white>
<hr>

<font face = arial size = 1>
<OBJECT id = "MyControl1" name = "MyControl1" classid = "ActiveXDotNet.dll#ActiveXDotNet.MyControl" width = 288 height = 72 >
</OBJECT>
</font>

<form name = "frm" id = "frm" >
<input type = "text" name = "txt" value = "请输入数据:" ><input type = button value = "确定" onClick = "doScript ( ) ; ">
</form>
<hr>
</body>

<script language = "javascript">
function doScript ( )
{
 MyControl1.UserText = frm.txt.value ;
}
</script>
</html>

  2. 把产生的"test.htm"和"ActiveXDotNet.dll"文件全部都拷贝到机器的虚拟目录下,一般来说虚拟目录是"C:\Inetpub\wwwroot"。

  3. 打开浏览器,在浏览器的地址栏中输入"http://localhost/test.htm"后,单击"转到"按钮,则会得到如下的运行界面:


图04:测试用Visual C#产生的Active X组件的运行界面

  至此Visual C#产生的Active X组件和测试这个组件的全部工作就完成了。

  五.总结:

  虽然本文介绍的方法的确能够方便的解决Web页面中很多棘手的问题,本文介绍用Visual C#产生的组件的在实用性上的确非常的类似Active X组件,但从本质上说,本文产生的组件并不是真正意义上的Active X组件。如要使用本文所创建的组件,必须在Web页面所在机器上安装.Net框架,客户端访问Web页面时,也不会真正下载本文介绍的组件,从而也不需要设定计算机的安全级别就能够访问使用此组件的Web页面。可见本文产生的组件其实质也是一个托管的代码文件。它只是巧妙的用定义接口的方式来告诉COM/COM+对象,本组件有一个可供访问的公用属性,通过对此属性的读写操作,完成类似Active X组件的工作。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章