向对话框中添加代码

AutoCAD ActiveX/VBA

 
向对话框中添加代码
 
 
 

现在删除创建圆形瓷砖的代码,转而调用 DrawShape 子例程来绘制适当的形状。

为对话框添加事件处理程序的步骤

  1. 打开 gpDialog 的“代码”窗口。
  2. 在窗口的顶部输入下列代码:
    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”。这些子例程在用户单击相应控件时会自动执行。还要注意,对象框按“名称”特性的字母顺序列出了窗体中的控件。

  3. 将光标放在 Private Sub gp_poly_Click() 行并打开过程/事件框。

    查看可以为 gp_poly 选项控件响应的所有事件的列表。输入的两个子例程将处理 Click 事件。还可以添加响应 DblClick 事件的代码,当用户双击该控件时,将自动执行这一代码。可以为任何列出的事件添加代码。这些类型的子例程称为事件处理程序。

    查看为这两个事件处理程序输入的代码。第一个事件处理程序响应 gp_poly 选项控件的 Click 事件。代码的第一行启用了用于输入边数的文本框。该文本框仅适用于多边形,所以如果未选择“多边形”控件,它将被禁用。代码的下一行将 tshape 变量设置为“多边形”。

    第二个事件处理程序响应 gp_circ 选项控件的 Click 事件。该处理程序禁用了用于输入边数的文本框,并将 tshape 变量设置为“圆形”。

  4. 为“确定”按钮添加下列事件处理程序:
    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 之间。如果超出范围,将显示一条消息,并且事件处理程序将退出而不做进一步处理。其结果是显示一条消息,并提供用户更改该值的机会。再次单击“确定”按钮后,会再次触发该事件处理程序并测试值。

    该宏获取半径和间距值,但这些值是双精度的,不是整数,并且是用 CDbl 函数获取的。这些值也被测试以确保是正数。

    获取并验证这些值后,gpDialog.Hide 语句将隐藏窗体,并将控制权传递回首次调用该窗体的子例程。

  5. 为“取消”按钮添加下列事件处理程序:
    Private Sub cancel_Click()
        Unload Me
        End
    End Sub

    这一简单的事件处理程序用于卸载窗体并结束整个宏。

    现在唯一未做的事是为窗体添加初始值。有一个应用于窗体的称为 Initialize 的事件。首次加载窗体时将执行该事件。

  6. 为窗体初始化添加下列事件处理程序:
    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 定义一个有效范围。在宏执行期间,用户可以自由更改该值。

现在可以保存该宏并从 AutoCAD 运行它。