一步一步创建Visual Basic .NET 控件
2008-04-09 04:43:18来源:互联网 阅读 ()
Visual Basic? 6.0 及其早期版本中的控件仅限于“复合”控件(由其他控件组成的控件),这种控件称为 UserControl。在 Visual Basic 6.0 中编写能够在屏幕上呈现其特有可视外观的控件几乎是不可能的。
现在好了,可以使用功能强大的 Visual Basic .NET 编写各种类型的可视控件了!不仅可以编写复合的 UserControl,还能继承现有的控件(如 TextBox)并扩展其新功能。更重要的是,还可以从头编写能够呈现其特有界面的可视控件。
在本文中,我将从头创建一个完整的可视控件,以说明 Visual Basic .NET 的后一种功能。该控件是一个“红绿灯”- 一个包含三个圆(分别代表红、黄、绿三个灯)的矩形。图 1 显示各个灯亮时该控件的外观,控件的背景颜色设置为系统颜色 ControlDark。
图 1:带有三个 TrafficLight 控件的窗体,每个控件亮不同的灯。
我们称它为 TrafficLight 控件,它可以通过代码或让用户单击灯来改变亮起的灯。
因为 TrafficLight 是一个可视的 Windows 窗体控件,它将继承 S ystem.Windows.Forms 命名空间中的 Control 类。这样,它将具有很多预定义的属性、方法和事件,包括控制其外观的属性,如 ForeColor、BackColor、Size 和 Location;还包括事件,如 MouseOver 和 Click。您可以查看 .NET 文档,获得 Control 类成员的完整列表。
红绿灯也需要具有特殊的属性和事件,如下所示:
- StatusRed:红灯亮
- StatusYellow:黄灯亮
- StatusGreen:绿灯亮
由于这些成员不属于 Control 基类,所以我们需要包括完整的代码以处理它们。我们还需要绘制边框和三个相应颜色的灯的代码,以便在屏幕上绘制红绿灯。最后,我们需要处理用户单击圆以更改亮起灯的操作,并在更改亮起的灯时更改 Status 属性。
为了使本示例尽可能接近实际应用环境,我们还将包括能够确保在 Visual Studio? .NET IDE 中更好地使用控件的代码。我们为工具箱设置适当的图标,并包括能够使属性更好地与各属性窗口集成的逻辑。
现在让我们开始吧。 第 1 步:创建类型正确的项目要创建一个保存 Windows 窗体控件的库,需要在 Visual Basic.NET 中启动一个新项目,选择 Windows Control Library(Windows 控件库)项目类型,然后将项目命名为 MyControls。
所创建的项目实际上可以保存多个 Windows 窗体控件,每个控件都属于其各自的类,但我们只需在其中创建一个控件。
第 2 步:更改基类在控件库中创建的类自动命名为 UserControl1,默认情况下,从 UserControl 类继承。如果我们要创建复合控件,那非常容易,只需将其他控件从工具箱中拖到设计表面上即可。
但是,由于我们要从头创建自己的控件,因此需要做一些更改。将控件类的名称从 UserControl1 更改为 TrafficLight。然后,将以下行:
Inherits System.Windows.Forms.UserControl更改为:
Inherits System.Windows.Forms.Control
这样,使最一般的 Control 类成为基类。您会发现,不再显示可视设计表面,而是替换为组件设计表面。
为保持代码的一致性,也要将代码文件名从 UserControl1.vb 更改为 TrafficLight.vb。可以在 Solution Explorer(解决方案资源管理器)中进行更改:右键单击代码文件的名称,并选择 Rename(重命名)。
还需要在类模块的顶部添加几行代码。将 Option Strict 设置为 On,并导入包含我们将来要用到的某些属性的命名空间。下面是要放到代码最上面的两行: Option Strict On
Imports System.ComponentModel
第 3 步:实现属性和事件
要实现 Status 属性,首先要为可能的属性值创建枚举。将以下几行插入以 Inherits 开始的行下面:
Public Enum TrafficLightStatusstatusRed = 1
statusYellow = 2
statusGreen = 3
End Enum
此枚举是公开的,也就是说使用该控件的窗体可以访问它。
在这些行下面添加以下三行:
Dim mStatus As TrafficLightStatus = TrafficLightStatus.statusGreenDim msngBorderWidth As Single = 1.0!
Public Event StatusChanged(ByVal NewStatus As TrafficLightStatus)
前两行中的两个变量可用于存储 Status 和 BorderWidth 属性的属性值,还为这些属性设置了默认值。保存 BorderWidth 的变量必须为 Single 类型,因为它是绘制边框所用的图形语句需要的类型。默认值中的惊叹号也表明它是 Single 类型。此集合中的最后一行声明了 StatusChanged 事件。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash