• [转].c# 开发Active控件(一)


    首先,建立一个WinForm控件项目MyActive,并拖入一个Lable控件,文字设为HelloWorld,如图:

    此时编译项目,可以生成MyActive.dll,将些dll拷贝到IIS的虚拟根目录下,然后建立一个网页文件test.html,此网页文件的代码如下:

    <HTML>
    <HEAD>
      <TITLE>测试测试</TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
    </HEAD>
    <BODY>
      <object id="MyActive" classid="http://localhost/mp/MyActive.dll#MyActive.UserControl1" Width="184" Height="96" VIEWASTEXT></object>
    </BODY>
    </HTML>

    然后在IE地址栏中输入以下地址:http://localhost/mp/test.html,我们看到出现如下界面:

    此时,我们的控件第一步就已经完成了!

    但此时还未完在,只能在本机显示正常,如果换另一台机子就出显示一个红叉,或者弹出对话框说这个控件没有任何权限,所以必须声明这个控件必须使用赋予的权限,才可以显示出界面.

    我们在AssemblyInfo.cs中引用System.Security命名空间,并添加一句[assembly : AllowPartiallyTrustedCallers()]

    现在重新编译,并且替换以前的dll,界面又可以显示出来了.

    此时,我们的按件还算不上真正的Active控件,这个控件到现在为止,还只是能够实现自身的显示,并且不能实现更多的功能,比如实现与脚本的交互或者操作客户端的注册表或者磁盘。这是由于.Net Framework的安全模型所限制的。如果我们希望这个控件突破.Net Framework安全模型的限制,实现与脚本的交互或者操作客户端的注册表或者磁盘的话,必须要让它成为真正的ActiveX控件。下面,我们把刚才的控件变成真正的ActiveX控件。

    1:使用工具->创建GUID,生成一个GUID,并修改UserControl1.cs,首先增加引用System.Runtime.InteropServices命名空间,并在Demo前面加入一条语句[Guid("E017DDD5-35BC-4af5-A0FA-C55D4A43A03C")](这串是生成的GUID每次都不一样的,它是Active唯一的标识符),如图:

    2:修改项目属性,如下图:

    将为Com Interop注册由false改成true.

    3:重新编译,此时我们使用工具->OLE/COM对象查看器,就可以查看到自已注册的Active控件,如图:

    现在,我们已经可以像使用其它ActiveX控件一样在网页中显示了。在MyActive.UserControl1点击鼠标右键,如图:

    选择Copy HTML <object> Tag to Clipboard,可以将代码拷入剪贴板,现在我们将test.html的代码修改成如下:

    <HTML>
    <HEAD>
      <TITLE>测试测试</TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
    </HEAD>
    <BODY>
      <object id="MyActive" classid="clsid:E017DDD5-35BC-4AF5-A0FA-C55D4A43A03C" Width="184" Height="96" VIEWASTEXT></object>
    </BODY>
    </HTML>

    然后再在IE中打开这个网页,我们发现又可显示,这时就是真正的Active控件了.

    来源:http://hi.baidu.com/meteortent/blog/item/3e809c59af340d90800a18c4.html

  • 相关阅读:
    CAAnimation动画相关文章
    [源代码]List的增加与删除
    [原创]c# 类中 Collection 字段初始化的特殊之处
    c# 多数值区间判断是否有重叠
    将M个客服随机分配给N个客户
    c# IList.ToList()后更改元素值会不会影响原列表的值
    java单元测试之Mock静态方法
    java的Spring学习2- junit和mock
    java mybatis学习二
    java8 方法引用与lambda
  • 原文地址:https://www.cnblogs.com/tukzer/p/1900052.html
Copyright © 2020-2023  润新知