实现了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

转载于:https://www.cnblogs.com/yuanyee/archive/2013/01/22/2872232.html

C#开发Activex控件--与JavaScript的互调相关推荐

  1. [转]C#开发ActiveX控件,.NET开发OCX控件案例

    引自:百度   http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么 ...

  2. 使用C#开发ActiveX控件[Obsolete]

    附件下载(源代码+安装文件+教程) 0. 前言 ActiveX控件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中.使用ActiveX插件,可以轻松方 ...

  3. [转]使用C#开发ActiveX控件

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  4. 使用C#开发ActiveX控件

    0. 前言 ActiveX控件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中.使用ActiveX插件,可以轻松方便的在 Web页中插入多媒体效果.交 ...

  5. (转)使用C#开发ActiveX控件

    本文转载自:http://www.cnblogs.com/yilin/archive/2009/09/15/1567332.html 附件下载(源代码+安装文件+教程) 0. 前言 ActiveX控件 ...

  6. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  7. 开发ActiveX控件调用另一个ActiveX系列0——身份证识别仪驱动的问题

    程序员要从0下表开始,这篇是介绍这个系列的背景的,没有兴趣的人可以直接跳过. 为什么要开发ActiveX控件 由于工作需要,我们开发了一个网站,使用了一款身份证识别仪的网页ActiveX(OCX)插件 ...

  8. 27.4.1 开发ActiveX控件

    本控件只是个示例,功能比较简单,共有三个方法,本别是获取当前个人存储区证书列表.获取指定证书.使用指定证书签名.在Windows下使用Visual C++ 6.0开发ActiveX控件的步骤如下所示. ...

  9. [转]使用C#开发ActiveX控件全攻略

    先说说ActiveX的基本概念. 根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组 ...

最新文章

  1. php xml写入数据库中,PHP读取xml并写入数据库示例
  2. ML机器学习导论学习笔记
  3. Java 锁机制 synchronized
  4. 历史文件夹_Win10备份文件教程:备份到OneDrive,文件历史记录
  5. ubyntu 链接mysql_ubuntu mysql远程连接
  6. 对thinkphp的命名空间的理解
  7. win10安装oracle11g 服务端及配置详解
  8. tcp/ip协议listen函数中backlog参数的含义
  9. FreeSwitch会议Banner功能调用流程
  10. Python sys.argv[]详解
  11. DWM1000模块简介
  12. Chrome浏览器安装IE_Tab
  13. 第十届“中国电机工程学会杯”全国大学生电工数学建模竞赛 B 题 全面二孩政策对我国人口结构的影响
  14. 笔记本BIOS能检测到固态,进入系统后磁盘管理不显示固态硬盘
  15. iOS开发-Tom猫
  16. 机器学习导论——机器学习三要素
  17. Python量化交易实战:获取股票数据并做分析处理
  18. 一文精通S4 HANA中的Business Partner
  19. java快速排序的时间复杂度_程序猿必备排序算法及其时间复杂度分析
  20. 亚稳态原因以及跨时钟处理方法

热门文章

  1. build vue3 后压缩的文件在哪_Vue 3学习:4. 集成vuex
  2. 实现 消息提醒图标_Mac 上自带的「提醒事项」千万别错过
  3. linux终端 中国象棋,在Deepin系统下安装Xboard并使用它玩中国象棋
  4. e0312 不存在用户定义的_更加灵活的参数校验,Spring-boot自定义参数校验注解
  5. pytorch nn.Conv1d
  6. MediaElementAudioSourceNode
  7. nginx ngx_http_core_module(http server location)
  8. Flask redirect
  9. MongoDB shell
  10. opencv-api getPerspectiveTransform