使用 Visual Basic 从 Windows 窗体控件继承

Windows 窗体编程 
演练:使用 Visual Basic 从 Windows 窗体控件继承 

使用 Visual Basic 可通过继承来创建功能强大的自定义控件。通过继承,可以创建不仅保留了标准 Windows 窗体控件的所有内在功能,而且还包含自定义功能的控件。在本演练中,将创建一个名为 ValueButton 的简单继承控件。此按钮将继承标准 Windows 窗体 Button 控件的功能,并将公开一个名为 ButtonValue 的自定义属性。

注意
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。
 

创建项目

创建新项目时,应指定其名称以便设置根命名空间、程序集名称和项目名称,并确保默认组件位于正确的命名空间中。

创建 ValueButtonLib 控件库和 ValueButton 控件
在“文件”菜单上,指向“新建”,然后单击“项目”打开“新建项目”对话框。

从 Visual Basic 项目列表中选择“Windows 控件库”项目模板,然后在“名称”框中键入 ValueButtonLib。

默认情况下,项目名称 ValueButtonLib 也被分配到根命名空间中。根命名空间用于限定程序集中的组件名。例如,如果两个程序集都提供名为 ValueButton 的组件,则可以使用 ValueButtonLib.ValueButton 指定 ValueButton 组件。有关更多信息,请参见 Visual Basic 中的命名空间。

在“解决方案资源管理器”中,右击“UserControl1.vb”,然后从快捷菜单中选择“重命名”。将文件名更改为“ValueButton.vb”。系统询问是否要重命名对代码元素“UserControl1”的所有引用时,单击“是”按钮。

在“解决方案资源管理器”中,单击“显示所有文件”按钮。

打开“ValueButton.vb”节点显示设计器生成的代码文件“ValueButton.Designer.vb”。在“代码编辑器”中打开该文件。

找到 Class 语句 Partial Public Class ValueButton,将该控件要继承的类型从 UserControl 更改为 Button。这样继承的控件将继承 Button 控件的所有功能。

找到 InitializeComponent 方法并删除给 AutoScaleMode 属性赋值的行。Button 控件中没有这一属性。

在“文件”菜单中,选择“全部保存”保存项目。

注意,可视化设计器不再可用。由于 Button 控件自己进行绘制,所以您无法在设计器中修改它的外观。除非在代码中进行修改,否则它的可视化表示形式将与它所继承的类(即 Button)的可视化表示形式完全一样。

注意
还可向设计器表面添加没有用户界面 (UI) 元素的组件。
 

将属性添加到继承的控件中

继承的 Windows 窗体控件的可能用途之一是创建与标准 Windows 窗体控件的外观和行为相同、但公开自定义属性的控件。在本节中,将向控件中添加名为 ButtonValue 的属性。

添加 Value 属性
在解决方案资源管理器中,右击“ValueButton.vb”,然后从快捷菜单中单击“查看代码”。

找到 Public Class ValueButton 语句。在紧靠该语句下面键入下列代码:


[Visual Basic]


' Creates the private variable that will store the value of your
' property.
Private varValue as integer
' Declares the property.
Property ButtonValue() as Integer
' Sets the method for retrieving the value of your property.
   Get
      Return varValue
   End Get
' Sets the method for setting the value of your property.
   Set(ByVal Value as Integer)
      varValue = Value
   End Set
End Property
此代码设置存储和检索 ButtonValue 属性的方法。Get 语句设置返回到存储在私有变量 varValue 中的值的值,Set 语句通过使用 Value 关键字设置该私有变量的值。

在“文件”菜单中,选择“全部保存”保存项目。

测试控件

控件不是独立的项目,它们必须寄宿在某个容器中。若要测试控件,必须提供一个运行该控件的测试项目。还必须通过生成(编译)该控件使其可由测试项目访问。在本节中,将生成控件并在 Windows 窗体中测试它。

生成控件
在“生成”菜单上单击“生成解决方案”。

生成应该成功,没有任何编译器错误或警告。

创建测试项目
在“文件”菜单上,指向“添加”,然后单击“新建项目”打开“添加新建项目”对话框。

选择 Visual Basic 项目节点并单击“Windows 应用程序”。

在“名称”框中键入 Test。

在“解决方案资源管理器”中,单击“显示所有文件”按钮。

在“解决方案资源管理器”中,右击测试项目的“引用”节点,然后从快捷菜单上选择“添加引用”以显示“添加引用”对话框。

单击“项目”选项卡。

单击标记为“项目”的选项卡。“项目名称”下将列出 ValueButtonLib 项目。双击该项目以将引用添加到测试项目。

在“解决方案资源管理器”中,右击“测试”并选择“生成”。

将控件添加到窗体
在“解决方案资源管理器”中,右击“Form1.vb”,并从快捷菜单中选择“视图设计器”。

在“工具箱”中,单击“ValueButtonLib 组件”。双击“ValueButton”。

窗体上出现一个“ValueButton”。

右击“ValueButton”并从快捷菜单中选择“属性”。

在“属性”窗口中检查该控件的属性。注意,除增加了一个 ButtonValue 属性外,它们与标准按钮公开的属性相同。

将 ButtonValue 属性设置为 5。

在“工具箱”的“所有 Windows 窗体”选项卡上,双击“Label”向窗体添加一个 Label 控件。

将标签重新定位到窗体的中央。

双击 ValueButton1。

“代码编辑器”打开并显示 ValueButton1_Click 事件。

键入以下代码行。

[Visual Basic]


Label1.Text = CStr(ValueButton1.ButtonValue)
在“解决方案资源管理器”中,右击“测试”,然后从快捷菜单中选择“设为启动项目”。

从“调试”菜单中选择“启动调试”。

Form1 出现。

单击 Valuebutton1。

Label1 中显示数字“5”,表明继承的控件的 ButtonValue 属性通过 ValueButton1_Click 方法传递给了 Label1。这样,ValueButton 控件便继承了标准 Windows 窗体按钮的所有功能,但是公开了一个附加的自定义属性。
 

更多分享请关注:软信网-编程-http://www.iis365.net.cn

'------------------------------------------------------------------------------------------------------------------------------------------ '本示例旨在向您展示如何在VB6下实现真正的继承,如何使用DyCOMHelper创建类,并使用,它将带您进入VB6背后的COM世界,看看我们的类是如何运行的。 'DyCOMHelper创建的对象的特点: '1、可以像VB6下定义的对象一样去使用,虽然不是VB6机制创建,但是可以被VB6当作对象来识别使用。 '2、支持后期绑定,支持错误处理,支持多接口等常规应用。 '3、支持真正意义上的继承,本示例将说明这一点。 '4、所创建的对象是轻量对象,实例占用的起步空间更小,约VB类的1/5。 '5、函数调用速度高出20% 左右 '6、实例创建的速度,最大可以提高近10倍 '7、释放速度,最大可以提高近100倍。(以上速度来自于极限测试数据) '8、创建模式比VB6更丰富,VB6的类实例,是在堆上进行创建的,效率很低,DyComHelper可以选择堆、堆栈是进行创建,也可以从某个结构上创建,也可以用内置的定长管理器进行创建。 '9、从类实例外部,访问内部数据时,支持真正意义的指针式访问。 '10、使用DyCOMHelper创建类,将让您的系统支持成千上万个类,而不会担心效率问题。 ' '读这个示例您可能会问的问题: ' 1、类型库,怎么来的?目前是我使用工具手动创建。未来,我将推出VB6插件,在VB6下直接书写代码生成类型库并自动引用。 ' '使用前,请先执行下列顺序: ' 1、引用 Types目录下 DyCOMHelperType.tlb,TestInheritLib.tlb。 ' 2、按F8开始逐步断点执行,看看它是如何工作的。 '示例中,有三个类,Animal、Wolf、Demiwolf,分别是动物、狼、狼狗,狼狗继承自狼,狼继承自动物,动物派生自IDispatch。 '------------------------------------------------------------------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值