这是去年学习SmartClient时写下的,有兴趣可以看看
    将Winform Control嵌入IE,很多时候需要JS脚本与Control进行交互。一方面是在脚本中使用控件的属性,调用控件的方法,另外一方面是脚本中能够响应控件的事件。对于第一个问题较为简单,我们还可以在脚本中使用控件属性的值,也可以给属性赋值,也可以调用控件的方法。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1、 脚本中传参数,使用控件的属性,调用控件方法

1)在控件Test_JsUseCtrl.cs中,添加textBox1,定义属性Str,如

private string str;

public string Str

{

get{return str;}

set{     str = value;textBox1.Text = value;}

}

2)定义public方法用于显示textBox1内容如

public void ShowText()

{

MessageBox.Show(textBox1.Text,"TextBox的内容”,MessageBoxButtons.OK,MessageBoxIcon.Information);

}

3)在页面添加TextBox,Button等,点击Button1可以将页面输入值赋给控件属性,点击Button2可以调用控件方法

function Button1_onclick() {

Test_JsUseCtrl.Str = Text1.value;

}

function Button2_onclick() {

Test_JsUseCtrl.ShowText();

}

上面部是点击或者触发页面控件事件来获得控件的属性和方法,下面部分就是控件通过事件来调用脚本中的方法,即在脚本中响应控件事件。

2、JS脚本中响应控件事件

1)在控件中添加接口ClickEvent

// Source interface for events to be exposed

// Add GuidAttribute to the source interface to supply an explicit System.Guid.

// Add InterfaceTypeAttribute to indicate that interface is the IDispatch interface.

[System.Runtime.InteropServices.GuidAttribute("0422D916-C11A-474e-947D-45A107038D12") ]

[System.Runtime.InteropServices.InterfaceTypeAttribute(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIDispatch)]

public interface ControlEvents

// Add a DisIdAttribute to any members in the source interface to         // specify the COM DispId.

{

[System.Runtime.InteropServices.DispIdAttribute(0x60020000)]

void ClickEvent(int x, int y);

}

2、为控件添加属性

// Add a ComSourceInterfaces attribute to the control to identify        //the list of interfaces that are exposed as COM event sources.

[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None),System.Runtime.InteropServices.ComSourceInterfaces(typeof(ControlEvents))]

public class MyWindowControl : System.Windows.Forms.UserControl //, ComInteropControlInterface

2、  在Button的Click事件中调用接口方法

if (ClickEvent != null)

{

ClickEvent(0, 0);

}

3、  在JS脚本中响应接口事件

function ctrl::ClickEvent(a,b)

{

alert(String(a)+"+"+String(b));

}

脚本响应控件的事件稍微复杂

注:如果弹出关于安全方面的提示,把IE->安全->信任站点s->自定义级别下的,“对没有标记为安全的ActiveX控件进行初始化和脚本运行”,设为启用。(上面的思路就是将Control作为ActiveX)

参考:

http://chs.gotdotnet.com/quickstart/winforms/doc/WinFormsIeSourcing.aspx

HOW TO: Sink Managed C# Events in Internet Explorer Script

PRB: Security Exception When You Use Event Handlers in Internet Explorer

转载于:https://www.cnblogs.com/Sniper/archive/2004/08/09/31339.html

WinForm与脚本的交互相关推荐

  1. Shell脚本——免交互

    shell脚本之免交互 一.Here Document免交互 1.1 免交互定义 1.2 语法格式 1.3 案例 案例一:使用cat 命令 案例二:使用read命令会有交互过程,免交互EOF之间的值会 ...

  2. java 脚本语言交互_Java学习笔记--脚本语言支持API

    Java语言的动态性之脚本语言支持API 随着Java平台的流行,很多的脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中比较流行的有JavaScript.JRuby ...

  3. C#实现Winform间的数据交互的三种方法

    使用.NET编写winform程序,比较常见的一种情况就是如何实现Form间的数据交互,下面就简单总结一下常见的几种数据交互方式:     (1)修改子窗体的构造函数:简单地说就是通过修改子窗体For ...

  4. linux ssh非交互脚本,sshpass实现shell脚本非交互密码验证

    1.sshpass的简介 OpenSSH 自带的 ssh 客户端程序,默认不允许以非交互的方式传递密码,所以需要远程登录服务器进行批处理就无法进行.sshpass 的出现,解决了这一问题.它允许你用 ...

  5. C# Roslyn编写脚本数据交互示例

    Java中的嵌入式脚本,有Groovy(参考https://www.w3cschool.cn/groovy/),简单方便,最近想测试一下C#中类似的实现,找到了Roslyn,入手简单,和原生的C#一样 ...

  6. Linux脚本免交互,系统运维|sshpass:一个很棒的免交互 SSH 登录工具,但不要用在生产服务器上...

    在大多数情况下,Linux 系统管理员使用 SSH 登录到程 Linux 服务器时,要么是通过密码,要么是无密码 SSH 登录或基于密钥的 SSH 身份验证. 如果你想自动在 SSH 登录提示符中提供 ...

  7. java与js脚本的交互

    脚本初始化 private ScriptEngineManager mgr = new ScriptEngineManager();ScriptEngine engineArr = new Scrip ...

  8. 【转】WinForm窗体间数据交互的方法

    在窗体间传递数据的方法比较多: 1.在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去,说起来太抽象了,我大概一写大家应该就 ...

  9. shell脚本详解(十二)——Here Document免交互及Expect自动化交互

    shell脚本详解(十二)--Here Document免交互及Expect自动化交互 一.Here Document 免交互 1.格式 2.注意事项 3.免交互方式实现对行数的统计,将要统计的内容置 ...

最新文章

  1. Go 知识点(01)— 主协程与子协程执行顺序
  2. Python高效画饼图
  3. 普通用户nginx访问不了_Nginx降权启动之使用普通用户管理 | it运维_it技术_linux运维-追梦人博客...
  4. bcache使用教程
  5. VMware里Ubuntu-14.04-desktop的VMware Tools安装图文详解
  6. 怎样手动给无线网设置一个DNS服务器地址,无线网的dns怎样设置.docx
  7. 边缘计算(edge computing)中computation offloading、resource allocation、resource provisioning的区别
  8. php variables,浅析PHP原理之变量(Variables inside PHP)
  9. win7 管理iphone日历_软媒时间3.08正式版:让Win7用上最美桌面日历
  10. 顶级域名、一级域名、二级域名、子域名、父域名
  11. 无人机——电池、电机、螺旋桨搭配
  12. 决策理论(Decision theory)自动规划和调度(Automated planning and scheduling)(双语)
  13. 2021-02-04-scrapy爬虫案例1:爬取博客园新闻版块详情页-基础入门篇
  14. SX1262 与 SX1278、SX1276 有什么区别?
  15. 【洛谷】P1598 垂直柱状图
  16. Arangodb——操作案例一
  17. MTK android 常用修改点
  18. 华硕vm520up加固态硬盘和内存条
  19. Graphql Instrumentation
  20. matlab 一元函数最大值,一个用MATLAB编写的基于遗传算法的求一元函数最大值的程序...

热门文章

  1. 卡巴绿杀6 By Moshow魔手
  2. OCM_第十九天课程:Section9 —》Data Guard _ DATA GUARD 原理/DATA GUARD 应用/DATA GUARD 搭建...
  3. 拼接SQL的一个技巧
  4. 一步步学习javascript基础篇(8):细说事件
  5. 读书笔记2014第13本:《富爸爸,穷爸爸》
  6. 【计算机网络】wireshark数据流追踪、图像抓取(转)
  7. C语言里最基础的关键字
  8. 深度学习之双线性插值(Bilinear interpolation)
  9. 脚本启动显示查询频繁被服务器防御_面对CC攻击,该如何进行防御
  10. C语言求最大公约数和最小公倍数的几种算法