实现了ActiveX控件之后,在网页上的使用方式一般为:
<object id="grid" classid="clsid:9661B223-6188-4849-B292-C7D9D8173E49" width="100%" height="100%"> </object>
注意不是:
<object id="grid" classid="clsid:9771B223-6188-4849-B292-C7D9D8173E49" width="100%" height="100%" />
通常情况下,我们在企业级的项目开发中,还需要将Activex控件与调用它的页面进行互调,否则Activex控件没有太大的用处。而互调则基本上都是由脚本语言来完成的。
首先看一下Javascript如何主动调用Activex控件。
通过Javascript,网页可以调用Activex控件内的公共方法和属性。
如在控件中设置的属性为:
/// <summary> /// 总页数 /// </summary> public string TotalPage { get { return totalPage; } set { totalPage = value; } }
则在网页上可以通过下面的方式调用:
<script type="text/javascript"> //获取页面参数 function getPara() { alert("总页数:"+ document.getElementById("grid").TotalPage); } </script>
如在控件中设置方法为:
/// <summary> /// 当选择模式为单选时,获取当前行的某一列的数据 /// </summary> public string GetValue(string colName) { //*** }
则在网页上可以通过下面的方式调用:
<script type="text/javascript"> //获取页面参数 function getPara() { alert("总页数:"+ document.getElementById("grid").GetValue("col1")); } </script>
接着,我们来看在Activex控件中如何调用JavaScript。
本人用的方法是,在控件中触发事件,在网页中接收事件。
首先定义事件接口:
public delegate void ControlEventHandler(string redirectUrl); /// <summary> /// 通过本接口向javascript暴露事件 /// </summary> [Guid("9771B223-6188-4849-B292-C7D9D8173E49")] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface ControlEvents { //Add a DispIdAttribute to any members in the source interface //to specify the COM DispId. [DispId(0x60020000)] void OnClose(string redirectUrl); }
接着在Activex控件中继承接口,同时增加属性ClassInterface(ClassInterfaceType.AutoDual):
[ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof(ControlEvents))]
然后在控件内部定义事件:
public event ControlEventHandler OnClose;
最后在某个方法体内部触发事件:
private void listCustomer_DoubleClick(object sender, EventArgs e) { //**** OnDoubleClick(info.RowHandle); }
控件部分的编码工作便结束了,剩下的就是在网页中调用:
调用方式也有两种
第一种调用方式:
<script type="text/javascript"> //捕获双击事件 function grid::OnDoubleClick(value){ alert(value); } </script>
注意此种方式要求Javascript代码出现在Object引用之后。
第二种方式:
<script type="text/javascript" language="JavaScript" for="grid" event="OnDoubleClick(value)"> alert(value); </script>
参考文章:
红马天下Activex系列:
(1)http://www.cnblogs.com/homer/archive/2005/01/04/86473.html
(2)http://www.cnblogs.com/homer/archive/2005/01/08/88780.html
(3)http://www.cnblogs.com/homer/archive/2005/01/26/97822.html
Michał Kosmala写的Create ActiveX in .NET Step by Step
http://www.codeproject.com/Articles/24089/Create-ActiveX-in-NET-Step-by-Step