我需要用到数组控件,现在用如下代码生成了一部分
For i = 1 To 10
Set myLabel(i) = Form1.Controls.Add("vb.Label", "Label" & i & "")
myLabel(i).Left = 100 + 100 * i
myLabel(i).Top = 100 + 500 * i
myLabel(i).Visible = True
myLabel(i).Caption = "我是动态标签" & i
myLabel(i).AutoSize = True
Next
但是我在其后的编程中不知道应该如果调用和对其写代码,对
Private Sub Label1_Click(Index As Integer),Private Sub Label_Click(Index As Integer)等编程都没有反应,这是为什么,我应该怎么写呢。
另不希望用load label(i)的方式添加新控件对这种方式添加新控件的方式都应该注意什么啊,请高手指教。
For i = 1 To 10
Set myLabel(i) = Form1.Controls.Add("vb.Label", "Label" & i & "")
myLabel(i).Left = 100 + 100 * i
myLabel(i).Top = 100 + 500 * i
myLabel(i).Visible = True
myLabel(i).Caption = "我是动态标签" & i
myLabel(i).AutoSize = True
Next
但是我在其后的编程中不知道应该如果调用和对其写代码,对
Private Sub Label1_Click(Index As Integer),Private Sub Label_Click(Index As Integer)等编程都没有反应,这是为什么,我应该怎么写呢。
另不希望用load label(i)的方式添加新控件对这种方式添加新控件的方式都应该注意什么啊,请高手指教。
Option ExplicitPrivate WithEvents mvarCmBtn As CommandButton
Dim BtnIndex As Integer
Public Property Set CmBtn(ByVal vData As CommandButton)
Set mvarCmBtn = vData
End Property
Public Property Get CmBtn() As CommandButton Set CmBtn = mvarCmBtn
End PropertyPrivate Sub mvarCmBtn_Click()
Select Case BtnIndex '返回索引值
Case 0
'do something
Case 1
MsgBox BtnIndex
Case 2
Case Else
End Select
End SubPublic Property Let LetBtnIndex(p_BtnIndex)
BtnIndex = p_BtnIndex
End Property'窗体代码:
Option Explicit
Dim a() As Class1Private Sub Command1_Click()
Me.Controls.Remove Me.Controls("cmdobj3") '删除控件
End SubPrivate Sub Command2_Click()
MsgBox a(0, 0).CmBtn.Value
End SubPrivate Sub Form_Load()
'Check1.Value = True
ReDim a(5, 3)
Dim I As Integer
Dim J As Integer
Dim k As Integer
k = 1
For I = 0 To 5
For J = 0 To 3
Set a(I, J) = New Class1
Set a(I, J).CmBtn = Me.Controls.Add("VB.CommandButton", "cmdObj" & k)
a(I, J).LetBtnIndex = k
a(I, J).CmBtn.Visible = True
a(I, J).CmBtn.Top = J * 500
a(I, J).CmBtn.Left = I * 2000
k = k + 1
Next J
Next I
End Sub
因为不是控件数组,Private Sub Label_Click(Index As Integer) 毫无意义;因为事件处理过程必须前期绑定,虽然你动态创建的控件名称为 Label1、Label2……,Private Sub Label1_Click(Index As Integer) 依旧无效,除非你用下面的方式
Private Label1 As Label
Private Sub Form_Load()
Set Label1 = Form1.Controls.Add("vb.Label", "Label1")
End Sub
Private Sub Label1_Click(Index As Integer)
……
End Sub要么老老实实用预先设计的控件数组,要么象 myhgyp(也许是这样的,信不信由你) 那样用类来处理