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

visual|创建|控件

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

Private Sub TrafficLight_MouseUp(ByVal sender As Object, _
                     ByVal e As System.Windows.Forms.MouseEventArgs) _
                     Handles MyBase.MouseUp
    Dim nMidPointX As Integer = CInt(Me.Size.Width * 0.5)
    Dim nCircleRadius As Integer = nMidPointX
    If Distance(e.X, e.Y, nMidPointX, CInt(Me.Size.Height / 6)) _
                < nCircleRadius Then
        Me.Status = TrafficLightStatus.statusRed
        Exit Sub
    End If
    If Distance(e.X, e.Y, nMidPointX, CInt(Me.Size.Height / 2)) _
                < nCircleRadius Then
        Me.Status = TrafficLightStatus.statusYellow
        Exit Sub
    End If
    If Distance(e.X, e.Y, nMidPointX, CInt((5 * Me.Size.Height) / 6)) _
                < nCircleRadius Then
        Me.Status = TrafficLightStatus.statusGreen
    End If

End Sub

Private Function Distance(ByVal X1 As Integer, _
                          ByVal Y1 As Integer, _
                          ByVal X2 As Integer, _
                          ByVal y2 As Integer) As Integer
    Return CInt(System.Math.Sqrt((X1 - X2) ^ 2 + (Y1 - y2) ^ 2))
End Function

事件处理非常简单。检查鼠标单击的位置和每个圆心之间的距离。(请注意,圆心分别位于控件下方 1/6、1/2 和 5/6 的位置。如果不太明白,可以在纸上画出来看看。)如果计算出的距离小于圆的半径,则更改 Status 属性。

距离由 Distance 函数使用您可能在代数课中学过的公式计算。请注意,平方根函数是从 System.Math 命名空间中获得的,数学函数通常都保存在该命名空间中。

时间: 2025-01-26 19:55:05

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

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

visual|创建|控件 第 7 步:生成和测试控件现在 TrafficLight 控件的设计就完成了.选择 Build | Build MyControls(生成 | 生成 MyControls),以创建最终的控件库. 要测试控件,我们需要一个 Windows 窗体项目.您可以在其他解决方案中执行此操作,但在开发控件所用的解决方案中执行会更容易.从菜单中选择 File | Add Project | New Project(文件 | 添加项目 | 新项目).选择 Windows Applica

从头创建 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