详细了解:自定义用户控件

更新:2007 年 11 月

本课中您将学习如何自定义用户控件,使其更加有用。

添加标签

上一课测试了“NamesControl”用户控件并发现它工作正常。您可能还注意到可以有几种方式对它进行改进。例如,关于哪个名字应输入哪个文本框并不明确,并且无法保证用户会输入全部三个名字。

为使用户控件更加有用,可以添加标签以标识每个文本框。可以将标签文本内容设置为“名”、“中间名”和“姓”,但如果后来希望转而采用“中间名缩写”形式,该怎么办?最好为标签文本创建属性,这样就可以在设计时更改文本,同时为每个属性提供默认值。

试一试!

自定义用户控件

  1. 打开在上一课中创建的 NamesUserControl 项目。如果您未保存该项目,则必须先返回上一课测试用户控件,完成该课中的步骤。

  2. 在“解决方案资源管理器”中选择“NamesControl.vb”,然后在“视图”菜单中选择“设计器”。

  3. 将三个“Label”控件从“工具箱”拖动到设计器,每个“TextBox”的上方放置一个。

  4. 在“解决方案资源管理器”中,选择“NamesControl.vb”,再在“视图”菜单上选择“代码”。

  5. 在代码编辑器中添加以下代码为标签文本创建属性。

    Private text1 As String = "First Name"
    Property Label1Text() As String
        Get
            Return text1
        End Get
        Set(ByVal value As String)
            text1 = value
            Label1.Text = text1
        End Set
    End Property
    Private text2 As String = "Middle Name"
    Property Label2Text() As String
        Get
            Return text2
        End Get
        Set(ByVal value As String)
            text2 = value
            Label2.Text = text2
        End Set
    End Property
    Private text3 As String = "Last Name"
    Property Label3Text() As String
        Get
            Return text3
        End Get
        Set(ByVal value As String)
            text3 = value
            Label3.Text = text3
        End Set
    End Property
    

    请注意,该代码为标签文本声明三个 Private 变量,并且声明中包括要显示的默认值。

  6. 在代码编辑器中,从左下拉框中选择“(NamesControl 事件)”,并从右下拉框中选择“Load”事件。

  7. 将下面的代码添加到 NamesControl_Load 事件处理程序中。

    ' Initialize the three labels
    Me.Label1.Text = Label1Text
    Me.Label2.Text = Label2Text
    Me.Label3.Text = Label3Text
    
  8. 在“生成”菜单上选择“生成解决方案”。

  9. 在“解决方案资源管理器”中,选择“Form1.vb”,然后在“视图”菜单中选择“设计器”。

    验证标签是否有默认文本。尝试在“属性”窗口中更改“Label1Text”属性,以验证控件中是否会同时发生更改。

  10. 在“文件”菜单上选择“关闭”以关闭窗体设计器。

添加验证

另一个有用的自定义是添加“验证”输入内容的代码以确保输入正确。您可以为整个用户控件编写验证代码,而不是由每个“TextBox”控件来自行进行验证。

大多数控件都有 Validating 事件,在焦点从该控件移出时就会引发该事件;您将在该事件中输入验证代码。在本例中,需要编写代码以确保每个文本框包含一个名字。

如果有一个或多个文本框是空的,则需要显示一个消息框,提醒用户输入其姓名。您可以公开一个包含默认消息的属性;这样,控件用户就可以根据需要更改该消息。

控件的用户可能不需要中间名,因此还需要添加一个 Boolean 属性来关闭对“MiddleName”文本框的验证。

试一试!

添加验证

  1. 在代码编辑器中,为两个与验证相关的属性添加代码:一个属性用于指定是否需要中间名,另一个用于指定如果验证失败将显示的消息。

    Private required As Boolean = True
    Property MiddleNameRequired() As Boolean
        Get
            Return required
        End Get
        Set(ByVal value As Boolean)
            required = value
        End Set
    End Property
    Private errormessage As String = "Please enter your name."
    Property ValidationErrorMessage() As String
        Get
            Return errormessage
        End Get
        Set(ByVal value As String)
            errormessage = value
        End Set
    End Property
    
  2. 在代码编辑器中,从左侧下拉框中选择“(NamesControl 事件)”,然后从右侧下拉框中选择“Validating”事件。

  3. 将下面的代码添加到 NamesControl_Validating 事件处理程序中。

    If MiddleNameRequired = True Then
        If FirstName.Text = "" Or MiddleName.Text = "" Or _
    LastName.Text = "" Then
            MsgBox(ValidationErrorMessage)
        End If
    Else
        ' Middle name isn't required.
        If FirstName.Text = "" Or LastName.Text = "" Then
            MsgBox(ValidationErrorMessage)
        End If
    End If
    
  4. 在“生成”菜单上选择“生成解决方案”。

  5. 在“解决方案资源管理器”中,选择“Form1.vb”,然后在“视图”菜单中选择“设计器”。

    在窗体上选择用户控件,并验证在“属性”窗口中是否显示两个新属性。

  6. 将一个“Button”控件从“工具箱”中拖动到窗体上。

  7. 按 F5 运行程序。

    输入姓和名,但不输入中间名。单击按钮,应显示一个包含 ValidationErrorMessage 的消息框。

  8. 在“文件”菜单上,选择“全部保存”以保存所做的工作。

后续步骤

在本课中,您学习了如何自定义用户控件并使其更有用。在下一课中,您将学习如何使用图形绘制图片和文本。

下一课:绘制图片:使用图形

请参见

任务

测试用户控件

其他资源

可视对象:创建您的第一个用户控件

使用对象编程:使用类

Visual Basic 指导教程