欢迎来到天天文库
浏览记录
ID:33717624
大小:316.00 KB
页数:16页
时间:2019-02-28
《用vb调用c#写的net控件》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、虽然IT开发技术日新月异,不过业界仍然运行着大量的VB系统,这些系统凝聚了不少客户的投资,应当要一定程度的保护和利用。因此也就产生了一种需求,也就是使用旧的开发技术仍然可以使用新技术的产出。本文就讨论如何在VB6.0开发中使用上WinForm.NET控件。[袁永福版权所有] 二.软件原理: 运行VBIDE,打开或创建一个EXE工程,打开窗体设计器,如下图所示: 为了能在窗体上添加控件,需要往窗体左边的工具箱上添加项目,需要点击菜单项目“Project-Components”,此时会弹出如下图所示的对话框: 点击“Browse”按钮,弹出文件选择对话框,这个对话框中
2、优先选择OCX文件,而C#编译结果绝不可能是OCX文件的,此时即使选择一个.NET程序集DLL文件,无论如何必然会报错“ThisfilenotregisterableasanActiveXComponent”。[袁永福版权所有] 因此也就是说,使用C#开发的WinForm.NET控件是不可能直接通过传统的模式放置在VB窗体上。 不过VB仍然可以通过COM方式调用.NET程序集中的对COM公开的类型。此时就可以想出一种曲线实现方式,那就是VB创建C#组件,该组件是一个WinForm.NET控件,然后调用Win32APISetParent函数,将WinForm.NET控件硬塞
3、入VB窗体中。这样在用户界面上,用户能看到和使用WinForm.NET控件;在后台,VB代码能访问.NET组件提供的公开的属性、方法和事件,实现了VB全方位的调用WinForm.NET控件。 三.C#开发C#控件开发 根据上述的软件原理,笔者开发一个WinForm.NET控件并成功的应用于VB6.0的开发中,现对软件进行说明。 这个WinForm.NET控件名为MyWinFormControl,派生自System.Windows.Forms.UserControl类型,它包含在一个名为DCWinFormControlLib的C#项目中,项目输出类型为类库,目标框架为.NE
4、T2.0,添加了对System.Windows.Forms.dll的引用。界面设计:MyWinFormControl控件的用户界面设计如下: 在界面上放置一个名为“btnAction”的按钮,一个名为“myTextBox”的文本框。定义公开属性和方法: 打开该控件的C#代码文件,可以看到声明该类型的C#代码如下:[System.Runtime.InteropServices.ComVisible(true)][System.Runtime.InteropServices.Guid("60550064-C97F-4306-A8B2-6908F50780E3")][Syst
5、em.Runtime.InteropServices.ComSourceInterfaces(typeof(IComMyEvent))]publicpartialclassMyWinFormControl:UserControl{} 这段代码中,第一行代码的ComVisible标记类型为COM公开的;第二行代码Guid标记了类型在COM中的唯一编号;第三行代码的ComSourceInterfaces指明该类型实现了名为IComMyEvent的事件接口。[袁永福版权所有] VB中无法直接绑定编译阶段未知的控件事件,同时也无法直接感应C#中的事件,为此需要编写一个接口通知VB
6、存在若干事件,使得VB能绑定事件。因此在此定义了IComMyEvent接口,声明了C#控件中的事件,IComMyEvent接口定义如下usingSystem.Runtime.InteropServices;[Guid("096EF9A6-24CB-4091-A18F-34DA38C9A6F1")][ComVisible(true)][InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]publicinterfaceIComMyEvent{//////按钮按下事件///[DispId(1
7、2340)]voidComButtonClick();//////文本内容修改事件t///[DispId(12350)]voidComTextChanged();}//////无参数无返回值委托类型///publicdelegatevoidVoidEventHandler();而后在控件的C#代码中添加以下代码:#region实现IComMyEvent中的成员//////按钮按下事件///p
此文档下载收益归作者所有