'VBA动态生成控件数组并能响应事件 '用户窗体UserForm1:
Private colCB As New Collection '表单按钮为集合
Private ctlCB As 类1 '类实例
Private Sub UserForm_Initialize()
Dim comd As Control '使用集合来保存这个类的实例
Dim I As Integer
Dim blk As AcadBlock '定义块
I = 1
For Each blk In ThisDrawing.Blocks
Set comd = Me.Controls.add("Forms.CommandButton.1", "cmdtest" & I) '增加表单按钮数组CommandButton1cmdtestI I为变量
With comd
.top = 2 + 25 * (I - 1) '表单按钮行位置
.height = 20 '表单按钮高度
.width = 100 '表单按钮宽度
.Left = 2 '表单按钮列位置
End With
If Mid(blk.name, 1, 1) <> "*" or Mid(blk.name, 1, 2) <> "A$"Then
comd.Caption = I & ": " & blk.name '表单按钮标题
Set ctlCB = New 类1 '新建类实例
ctlCB.Init comd, Me '将控件赋给类实例
colCB.add ctlCB '新建类增加表单按钮
Set comd = Nothing '注销表单按钮
I = I + 1
End If
Next
End Sub
'VBA动态生成控件数组并能响应事件 '用户窗体UserForm1:
Public Sub Info(ctl As msForms.CommandButton)
MsgBox "你点击了: " & ctl.Caption
End Sub
类1
Private WithEvents m_CB As msForms.CommandButton
Private m_Form As UserForm1
'初始化控件绑定到类
Public Sub Init(ctl As CommandButton, frm As UserForm1)
Set m_CB = ctl
Set m_Form = frm
End Sub
'点表单按钮返回的信息类型。
Private Sub m_CB_Click()
m_Form.Info m_CB
End Sub
'注销表单和按钮
Private Sub Class_Terminate()
Set m_CB = Nothing
'Set m_Form = Nothing
End Sub