从头创建 Visual Basic .NET 控件 (八)

visual|创建|控件

第 7 步:生成和测试控件
现在 TrafficLight 控件的设计就完成了。选择 Build | Build MyControls(生成 | 生成 MyControls),以创建最终的控件库。

要测试控件,我们需要一个 Windows 窗体项目。您可以在其他解决方案中执行此操作,但在开发控件所用的解决方案中执行会更容易。从菜单中选择 File | Add Project | New Project(文件 | 添加项目 | 新项目)。选择 Windows Application(Windows 应用程序)项目类型,将项目命名为 TestTrafficLight。单击 OK(确定),启动测试所需的 Windows 应用程序。

必须先将 TrafficLight 控件放到工具箱中,才能将其拖放到测试应用程序的空白窗体 1 中。右键单击工具箱中的 Windows 窗体选项卡,然后选择 Customize Toolbox(自定义工具箱)。选择 .NET Framework Components(.NET Framework 组件)选项卡,然后单击 Browse(浏览)按钮。浏览到您的 MyControls 项目所在的位置,然后转到该项目的 /bin 目录。选择 MyControls.dll 组件并单击 OK(确定)。现在,该对话框应如图 2 所示。

图 2:在 Customize Toolbox(自定义工具箱)对话框中,TrafficLight 控件被选中。

您可以看到 TrafficLight 控件旁边有一个复选标记。单击 OK(确定)按钮,在工具箱的 Windows Forms(Windows 窗体)选项卡上,TrafficLight 控件将出现在控件列表的底部。图 3 显示了底部为 TrafficLight 控件的工具箱。

图 3:工具箱底部的 TrafficLight 控件

现在,您可以将 TrafficLight 控件拖放到 TestTrafficLight 的空白窗体 1 中。默认情况下,它被命名为 TrafficLight1。您可以调整控件的大小,重新设置控件的属性,包括 Status 属性,该属性有一个下拉菜单,菜单中包含该属性的三个可能的值。请注意,调整控件的大小或更改其属性时,控件将在设计器中自动刷新。

要恢复属性的默认值,请将 Status 属性更改为 statusRed。然后,右键单击 Properties(属性)窗口中的 Status(状态)属性,并选择 Reset(重置),如图 4 所示。该属性将更改回 statusGreen。如果将 BorderWidth 属性设置为 1 之外的其他值,也可以使用同样的方法恢复其默认值。

图 4:Properties(属性)窗口中 Status(状态)属性的 Reset(重置)选项。请注意窗口底部有关 Status(状态)属性的说明。

如果需要,还可以为控件插入 StatusChanged 事件。然后,可以使用该事件中的以下代码行查看更改后的状态:

MsgBox("新状态为 " & NewStatus.ToString)

要在操作中测试该控件,您需要启动 TestTrafficLight 项目。此时,它还不是该解决方案的启动项目,因此您需要解决它。在 Solution Explorer(解决方案资源管理器)中,右键单击 Solution(解决方案)名称 - Solution Explorer(解决方案资源管理器)中的第一行。选择 Properties(属性),然后将 Single Startup Project(单启动项目)设置从 MyControls 更改为 TestTrafficLight,然后单击 OK(确定)。

按 F5 键启动该项目。将显示带有 TrafficLight 控件的窗体。测试控件:按下不同的灯,查看它们是否亮起。您还可以测试 BorderWidth 属性,尝试在代码中设置灯的 Status 属性。

小结
尽管 TrafficLight 是一个简单的控件(虽然曾有开发人员要把它用到真实的项目中),但它却显示了开发复杂控件所需要的所有原理,包括:

在控件中添加属性。
使用默认值和说明,使属性与 Visual Studio IDE 协调。
在 Paint 事件中插入逻辑以绘制控件。
在绘图逻辑中使用 GDI+。
为控件设置位图,以便在工具箱中显示。
创建复杂控件的关键在于熟悉 GDI+ 的绘图能力。如果理解了 TrafficLight 绘制边框和彩色圆的原理,那么您就有了一个好的起点。关键是,有了 Visual Basic .NET,即使象我这么懒惰的程序员也能创建高级的 Windows 窗体。

时间: 2024-08-06 23:47:32

从头创建 Visual Basic .NET 控件 (八)的相关文章

从头创建 Visual Basic .NET 控件 (六)

visual|创建|控件 第 5 步:使控件响应用户要允许用户更改灯的颜色,必须检测到用户的鼠标单击操作.有经验的 Visual Basic 开发人员都知道,可以使用多种方法实现这一目的.我们使用最简单的一种方法,即检测 MouseUp 事件.下面是检测用户单击并更改 Status 属性以与之匹配的代码: Private Sub TrafficLight_MouseUp(ByVal sender As Object, _                     ByVal e As System

从头创建 Visual Basic .NET 控件 (二)

visual|创建|控件 现在让我们开始吧. 第 1 步:创建类型正确的项目要创建一个保存 Windows 窗体控件的库,需要在 Visual Basic.NET 中启动一个新项目,选择 Windows Control Library(Windows 控件库)项目类型,然后将项目命名为 MyControls. 所创建的项目实际上可以保存多个 Windows 窗体控件,每个控件都属于其各自的类,但我们只需在其中创建一个控件.

从头创建 Visual Basic .NET 控件 (三)

visual|创建|控件 第 2 步:更改基类在控件库中创建的类自动命名为 UserControl1,默认情况下,从 UserControl 类继承.如果我们要创建复合控件,那非常容易,只需将其他控件从工具箱中拖到设计表面上即可. 但是,由于我们要从头创建自己的控件,因此需要做一些更改.将控件类的名称从 UserControl1 更改为 TrafficLight.然后,将以下行:     Inherits System.Windows.Forms.UserControl 更改为:     Inh

从头创建 Visual Basic .NET 控件 (七)

visual|创建|控件 第 6 步:清理为了使控件顺利地运作,我们还需要执行一些其他操作.例如,大小改变时需要重新绘制控件.而且,为了不改变控件的比例,我们需要检测影响大小的属性发生更改的时间,然后强制宽度等于高度的三分之一.下面是完成这两项任务的事件处理程序: Private Sub TrafficLight_Resize(ByVal sender As Object, _                 ByVal e As System.EventArgs) Handles MyBase

从头创建 Visual Basic .NET 控件 (五)

visual|创建|控件 第 4 步:绘制控件的外观要使控件具有一个可视的外观,我们需要在 Paint 事件中放置逻辑.然后,每次控件需要刷新其可视外观时,就会运行该逻辑. Windows 窗体中的 Paint 逻辑使用 .NET 中 GDI+ 部分中的类.这些类基本上包括了 Windows API 图形功能.由于适合 .NET,所以比 API 更易于使用.但是,有关它们的工作原理,需要理解以下几点. 在 Windows API 中,图形操作需要一个窗口句柄,有时称为 hWnd.在 GDI+ 中

从头创建 Visual Basic .NET 控件 (四)

visual|创建|控件 第 3 步:实现属性和事件要实现 Status 属性,首先要为可能的属性值创建枚举.将以下几行插入以 Inherits 开始的行下面: Public Enum TrafficLightStatus    statusRed = 1    statusYellow = 2    statusGreen = 3End Enum 此枚举是公开的,也就是说使用该控件的窗体可以访问它. 在这些行下面添加以下三行: Dim mStatus As TrafficLightStatus

Visual Basic CommandButton控件

使用CommandButton控件 命令按钮控件被用来启动.中断或结束一个进程.单击它时将调用已写入Click 事件过程中的命令. 大多数Visual Basic应用程序中都有命令按钮,用户可以单击按钮执行操作.单击时,按钮不仅能执行相应的操作,而且看起来就象是被按下和松开一样,因此有时称其为下压按钮. 详细信息 关于CommandButton控件的简单示例,请参阅第三章,"窗体.控件和菜单"中的"单击按钮执行操作". 向窗体添加命令按钮 在应用程序中很可能要使用一

扩展Visual Editor的控件和属性

扩展 Visual Editor 的控件和属性 Visual Editor for Java 是基于 eclipse 的 GUI 可视化编辑插件,该插件以 Java 代码为中心,实现了所见即所得的用户界面编辑方式,广泛支持目前的 SWT.AWT.Swing 等控件包.本文通过一个完整的对 Visual Editor 的扩展示例,向读者展示扩展 Visual Editor 的控件和属性的方法. 背景 Visual Editor for Java 实现了基于 Java 源代码的所见即所得的用户界面开

qt中如何根据类名动态创建qt默认的控件类实例

问题描述 qt中如何根据类名动态创建qt默认的控件类实例 7C 需要根据从外部读取类名来创建类的实例,类大多为qt自带的控件类,如QWidgetQLineEdit等.有没有不用继承这些类就可以动态创建的方法? 解决方案 int id = QMetaType::type(""MyClass"");if (id != 0) {void *myClassPtr = QMetaType::construct(id);...QMetaType::destroy(id myCl