现在删除创建圆形瓷砖的代码,转而调用 DrawShape 子例程来绘制适当的形状。
- 打开 gpDialog 的“代码”窗口。
- 在窗口的顶部输入下列代码:
Private Sub gp_poly_Click()
gp_tsides.Enabled = True
ThisDrawing.tshape = "Polygon"
End Sub
Private Sub gp_circ_Click()
gp_tsides.Enabled = False
ThisDrawing.tshape = "Circle"
End Sub
注意,子例程 gp_poly_Click() 和 gp_circ_Click() 是按照前面添加的两个选项控件命名的,并且附加了“_Click”。这些子例程在用户单击相应控件时会自动执行。还要注意,对象框按“名称”特性的字母顺序列出了窗体中的控件。
- 将光标放在 Private Sub gp_poly_Click() 行并打开过程/事件框。
查看可以为 gp_poly 选项控件响应的所有事件的列表。输入的两个子例程将处理 Click 事件。还可以添加响应 DblClick 事件的代码,当用户双击该控件时,将自动执行这一代码。可以为任何列出的事件添加代码。这些类型的子例程称为事件处理程序。
查看为这两个事件处理程序输入的代码。第一个事件处理程序响应 gp_poly 选项控件的 Click 事件。代码的第一行启用了用于输入边数的文本框。该文本框仅适用于多边形,所以如果未选择“多边形”控件,它将被禁用。代码的下一行将 tshape 变量设置为“多边形”。
第二个事件处理程序响应 gp_circ 选项控件的 Click 事件。该处理程序禁用了用于输入边数的文本框,并将 tshape 变量设置为“圆形”。
- 为“确定”按钮添加下列事件处理程序:
Private Sub accept_Click()
If ThisDrawing.tshape = "Polygon" Then
ThisDrawing.tsides = CInt(gp_tsides.text)
If (ThisDrawing.tsides < 3#) Or _
(ThisDrawing.tsides > 1024#) Then
MsgBox "Enter a value between 3 and " & _
"1024 for the number of sides."
Exit Sub
End If
End If
ThisDrawing.trad = CDbl(gp_trad.text)
ThisDrawing.tspac = CDbl(gp_tspac.text)
If ThisDrawing.trad < 0# Then
MsgBox "Enter a positive value for the radius."
Exit Sub
End If
If (ThisDrawing.tspac < 0#) Then
MsgBox "Enter a positive value for the spacing."
Exit Sub
End If
GPDialog.Hide
End Sub
该代码测试最后选择的形状是否为多边形。如果是,代码从 gp_tsides 控件中检索边数。用户输入的值存储在“Text”特性中。因为它是作为文字字符串存储的,所以可以使用 CInt 函数将该字符串转换为等价的整数。得到整数后,事件处理程序将测试该值的范围以确定它是否在 3 到 1024 之间。如果超出范围,将显示一条消息,并且事件处理程序将退出而不做进一步处理。其结果是显示一条消息,并提供用户更改该值的机会。再次单击“确定”按钮后,会再次触发该事件处理程序并测试值。
- 为“取消”按钮添加下列事件处理程序:
Private Sub cancel_Click()
Unload Me
End
End Sub
- 为窗体初始化添加下列事件处理程序:
Private Sub UserForm_Initialize()
gp_circ.Value = True
gp_trad.Text = ".2"
gp_tspac.Text = ".1"
gp_tsides.Text = "5"
gp_tsides.Enabled = False
ThisDrawing.tsides = 5
End Sub
该代码为窗体和 tsides 变量设置初始值。tsides 变量必须设置为大于 3 的正数,即使用户选择了圆形。要了解其中原因,请查看早些时候输入的 DrawShape 子例程。那里有一个使用多边形的边数定义的称为 points 的变量。无论是否要求多边形形状,该变量都会获取分配给它的内存。因此,必须为 tsides 定义一个有效范围。在宏执行期间,用户可以自由更改该值。