详细了解:自定义用户控件
更新:2007 年 11 月
本课中您将学习如何自定义用户控件,使其更加有用。
添加标签
上一课测试了“NamesControl”用户控件并发现它工作正常。您可能还注意到可以有几种方式对它进行改进。例如,关于哪个名字应输入哪个文本框并不明确,并且无法保证用户会输入全部三个名字。
为使用户控件更加有用,可以添加标签以标识每个文本框。可以将标签文本内容设置为“名”、“中间名”和“姓”,但如果后来希望转而采用“中间名缩写”形式,该怎么办?最好为标签文本创建属性,这样就可以在设计时更改文本,同时为每个属性提供默认值。
试一试!
自定义用户控件
打开在上一课中创建的 NamesUserControl 项目。如果您未保存该项目,则必须先返回上一课测试用户控件,完成该课中的步骤。
在“解决方案资源管理器”中选择“NamesControl.vb”,然后在“视图”菜单中选择“设计器”。
将三个“Label”控件从“工具箱”拖动到设计器,每个“TextBox”的上方放置一个。
在“解决方案资源管理器”中,选择“NamesControl.vb”,再在“视图”菜单上选择“代码”。
在代码编辑器中添加以下代码为标签文本创建属性。
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 变量,并且声明中包括要显示的默认值。
在代码编辑器中,从左下拉框中选择“(NamesControl 事件)”,并从右下拉框中选择“Load”事件。
将下面的代码添加到 NamesControl_Load 事件处理程序中。
' Initialize the three labels Me.Label1.Text = Label1Text Me.Label2.Text = Label2Text Me.Label3.Text = Label3Text
在“生成”菜单上选择“生成解决方案”。
在“解决方案资源管理器”中,选择“Form1.vb”,然后在“视图”菜单中选择“设计器”。
验证标签是否有默认文本。尝试在“属性”窗口中更改“Label1Text”属性,以验证控件中是否会同时发生更改。
在“文件”菜单上选择“关闭”以关闭窗体设计器。
添加验证
另一个有用的自定义是添加“验证”输入内容的代码以确保输入正确。您可以为整个用户控件编写验证代码,而不是由每个“TextBox”控件来自行进行验证。
大多数控件都有 Validating 事件,在焦点从该控件移出时就会引发该事件;您将在该事件中输入验证代码。在本例中,需要编写代码以确保每个文本框包含一个名字。
如果有一个或多个文本框是空的,则需要显示一个消息框,提醒用户输入其姓名。您可以公开一个包含默认消息的属性;这样,控件用户就可以根据需要更改该消息。
控件的用户可能不需要中间名,因此还需要添加一个 Boolean 属性来关闭对“MiddleName”文本框的验证。
试一试!
添加验证
在代码编辑器中,为两个与验证相关的属性添加代码:一个属性用于指定是否需要中间名,另一个用于指定如果验证失败将显示的消息。
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
在代码编辑器中,从左侧下拉框中选择“(NamesControl 事件)”,然后从右侧下拉框中选择“Validating”事件。
将下面的代码添加到 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
在“生成”菜单上选择“生成解决方案”。
在“解决方案资源管理器”中,选择“Form1.vb”,然后在“视图”菜单中选择“设计器”。
在窗体上选择用户控件,并验证在“属性”窗口中是否显示两个新属性。
将一个“Button”控件从“工具箱”中拖动到窗体上。
按 F5 运行程序。
输入姓和名,但不输入中间名。单击按钮,应显示一个包含 ValidationErrorMessage 的消息框。
在“文件”菜单上,选择“全部保存”以保存所做的工作。
后续步骤
在本课中,您学习了如何自定义用户控件并使其更有用。在下一课中,您将学习如何使用图形绘制图片和文本。
下一课:绘制图片:使用图形