使用以下步骤创建自定义控件。
创建用户表单:
要创建自定义对话框,您必须创建一个用户窗体。要创建用户窗体,请单击 Visual Basic 编辑器中插入菜单上的用户窗体。
使用“属性”窗口更改表单的名称、行为和外观。例如,要更改表单上的标题,请设置 Caption 属性。
向用户表单添加控件
要将控件添加到用户窗体,请在工具箱中找到要添加的控件,将控件拖到窗体上,然后在控件上拖动调整手柄,直到控件的轮廓达到您想要的大小和形状。
注意将一个控件或多个“分组”控件从表单拖回工具箱会创建一个控件模板,该模板可以重复使用。这是为您的应用程序实现标准接口的有用功能。
将控件添加到表单后,使用 Visual Basic 编辑器中“格式”菜单上的命令来调整控件的对齐方式和间距。
初始化控件属性
您可以通过在宏中使用 Visual Basic 代码在运行时初始化控件。例如,您可以填充列表框、设置文本值或设置选项按钮。
以下示例使用 AddItem 方法将数据添加到列表框中。然后它设置文本框的值并显示表单。
Private Sub GetUserName()
With UserForm1
.lstRegions.AddItem "North"
.lstRegions.AddItem "South"
.lstRegions.AddItem "East"
.lstRegions.AddItem "West"
.txtSalesPersonID.Text = "00000"
.Show
' ...
End With
End Sub
您还可以在窗体的 Initialize 事件中使用代码为窗体上的控件设置初始值。在 Initialize 事件中设置初始控件值的一个优点是初始化代码保留在表单中。您可以将表单复制到另一个项目中,当您运行 Show 方法显示对话框时,控件将被初始化。
Private Sub UserForm_Initialize()
UserForm1.lstNames.AddItem "Test One"
UserForm1.lstNames.AddItem "Test Two"
UserForm1.txtUserName.Text = "Default Name"
End Sub
控件和对话框事件
将控件添加到对话框或文档后,添加事件过程以确定控件如何响应用户操作。
用户表单和控件具有一组预定义的事件。例如,命令按钮具有在用户单击命令按钮时发生的 Click 事件,而 UserForms 具有在加载表单时运行的 Initialize 事件。
要编写控件或窗体事件过程,请通过双击窗体或控件打开模块,然后从过程列表框中选择事件。
事件过程包括控件的名称。例如,名为 Command1 的命令按钮的 Click 事件过程的名称是 Command1_Click。
如果您将代码添加到事件过程,然后更改控件的名称,您的代码将保留在具有以前名称的过程中。
例如,假设您将代码添加到 Command1 的 Click 事件,然后将控件重命名为 Command2。当您双击 Command2 时,您不会在 Click 事件过程中看到任何代码。您需要将代码从 Command1_Click 移动到 Command2_Click。
为了简化开发,最好在编写代码之前为控件命名。
显示自定义对话框
要在 Visual Basic 编辑器中测试您的对话框,请在 Visual Basic 编辑器的“运行”菜单上单击“运行子/用户窗体”。
要从 Visual Basic 显示对话框,请使用 Show 方法。以下示例显示名为 UserForm1 的对话框。
Private Sub GetUserName()
UserForm1.Show
End Sub
在代码运行时使用控制值
一些控件属性可以在 Visual Basic 代码运行时设置和返回。以下示例将文本框的 Text 属性设置为“Hello”。
TextBox1.Text = "Hello"
当表单关闭时,用户在表单上输入的数据会丢失。如果您在表单卸载后返回表单上的控件值,您将获得控件的初始值,而不是用户输入的值。
如果您想保存在表单中输入的数据,您可以在表单仍在运行时将信息保存到模块级变量。以下示例显示一个表单并保存表单数据。
' Code in module to declare public variables.
Public strRegion As String
Public intSalesPersonID As Integer
Public blnCancelled As Boolean
' Code in form.
Private Sub cmdCancel_Click()
Module1.blnCancelled = True
Unload Me
End Sub
Private Sub cmdOK_Click()
' Save data.
intSalesPersonID = txtSalesPersonID.Text
strRegion = lstRegions.List(lstRegions.ListIndex)
Module1.blnCancelled = False
Unload Me
End Sub
Private Sub UserForm_Initialize()
Module1.blnCancelled = True
End Sub
' Code in module to display form.
Sub LaunchSalesPersonForm()
frmSalesPeople.Show
If blnCancelled = True Then
MsgBox "Operation Cancelled!", vbExclamation
Else
MsgBox "The Salesperson's ID is: " &
intSalesPersonID & _
"The Region is: " & strRegion
End If
End Sub
希望这会有所帮助。