WinForm与脚本的交互
将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与脚本的交互相关推荐
- Shell脚本——免交互
shell脚本之免交互 一.Here Document免交互 1.1 免交互定义 1.2 语法格式 1.3 案例 案例一:使用cat 命令 案例二:使用read命令会有交互过程,免交互EOF之间的值会 ...
- java 脚本语言交互_Java学习笔记--脚本语言支持API
Java语言的动态性之脚本语言支持API 随着Java平台的流行,很多的脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中比较流行的有JavaScript.JRuby ...
- C#实现Winform间的数据交互的三种方法
使用.NET编写winform程序,比较常见的一种情况就是如何实现Form间的数据交互,下面就简单总结一下常见的几种数据交互方式: (1)修改子窗体的构造函数:简单地说就是通过修改子窗体For ...
- linux ssh非交互脚本,sshpass实现shell脚本非交互密码验证
1.sshpass的简介 OpenSSH 自带的 ssh 客户端程序,默认不允许以非交互的方式传递密码,所以需要远程登录服务器进行批处理就无法进行.sshpass 的出现,解决了这一问题.它允许你用 ...
- C# Roslyn编写脚本数据交互示例
Java中的嵌入式脚本,有Groovy(参考https://www.w3cschool.cn/groovy/),简单方便,最近想测试一下C#中类似的实现,找到了Roslyn,入手简单,和原生的C#一样 ...
- Linux脚本免交互,系统运维|sshpass:一个很棒的免交互 SSH 登录工具,但不要用在生产服务器上...
在大多数情况下,Linux 系统管理员使用 SSH 登录到程 Linux 服务器时,要么是通过密码,要么是无密码 SSH 登录或基于密钥的 SSH 身份验证. 如果你想自动在 SSH 登录提示符中提供 ...
- java与js脚本的交互
脚本初始化 private ScriptEngineManager mgr = new ScriptEngineManager();ScriptEngine engineArr = new Scrip ...
- 【转】WinForm窗体间数据交互的方法
在窗体间传递数据的方法比较多: 1.在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去,说起来太抽象了,我大概一写大家应该就 ...
- shell脚本详解(十二)——Here Document免交互及Expect自动化交互
shell脚本详解(十二)--Here Document免交互及Expect自动化交互 一.Here Document 免交互 1.格式 2.注意事项 3.免交互方式实现对行数的统计,将要统计的内容置 ...
最新文章
- Go 知识点(01)— 主协程与子协程执行顺序
- Python高效画饼图
- 普通用户nginx访问不了_Nginx降权启动之使用普通用户管理 | it运维_it技术_linux运维-追梦人博客...
- bcache使用教程
- VMware里Ubuntu-14.04-desktop的VMware Tools安装图文详解
- 怎样手动给无线网设置一个DNS服务器地址,无线网的dns怎样设置.docx
- 边缘计算(edge computing)中computation offloading、resource allocation、resource provisioning的区别
- php variables,浅析PHP原理之变量(Variables inside PHP)
- win7 管理iphone日历_软媒时间3.08正式版:让Win7用上最美桌面日历
- 顶级域名、一级域名、二级域名、子域名、父域名
- 无人机——电池、电机、螺旋桨搭配
- 决策理论(Decision theory)自动规划和调度(Automated planning and scheduling)(双语)
- 2021-02-04-scrapy爬虫案例1:爬取博客园新闻版块详情页-基础入门篇
- SX1262 与 SX1278、SX1276 有什么区别?
- 【洛谷】P1598 垂直柱状图
- Arangodb——操作案例一
- MTK android 常用修改点
- 华硕vm520up加固态硬盘和内存条
- Graphql Instrumentation
- matlab 一元函数最大值,一个用MATLAB编写的基于遗传算法的求一元函数最大值的程序...
热门文章
- 卡巴绿杀6 By Moshow魔手
- OCM_第十九天课程:Section9 —》Data Guard _ DATA GUARD 原理/DATA GUARD 应用/DATA GUARD 搭建...
- 拼接SQL的一个技巧
- 一步步学习javascript基础篇(8):细说事件
- 读书笔记2014第13本:《富爸爸,穷爸爸》
- 【计算机网络】wireshark数据流追踪、图像抓取(转)
- C语言里最基础的关键字
- 深度学习之双线性插值(Bilinear interpolation)
- 脚本启动显示查询频繁被服务器防御_面对CC攻击,该如何进行防御
- C语言求最大公约数和最小公倍数的几种算法