2009-02-19 471 views

回答

14

下面的代碼演示瞭如何動態填充與控制用戶窗體框架...

在我使用我有一個名爲幀1幀控制的形式,所以在UserForm_Initialize你叫Frame1.Controls。添加以在框架中嵌入控件。您可以設置返回到您在UserForm代碼模塊中定義的WithEvents控件變量的控件,以便您可以響應您想要的任何控件上的事件...

因此,使用此方法需要預先寫入您要創建的任何控件的任何事件代碼...

還要注意,即使頂部,左側,寬度和高度屬性不一定出現在智能感知中,您也可以定位和調整控件大小...

Private WithEvents Cmd As MSForms.CommandButton 
Private WithEvents Lbl As MSForms.Label 

Private Sub UserForm_Initialize() 
    Set Lbl = Frame1.Controls.Add("Forms.Label.1", "lbl1") 
    Lbl.Caption = "Foo" 
    Set Cmd = Frame1.Controls.Add("Forms.CommandButton.1", "cmd1") 
End Sub 

Private Sub Cmd_Click() 
    Cmd.Top = Cmd.Top + 5 
End Sub 

Private Sub Lbl_Click() 
    Lbl.Top = Lbl.Top + 5 
End Sub 
+5

爲什麼``1'`在`add`方法的類名末尾? – Triztian 2012-02-03 19:18:48

+0

我不知道。我知道,沒有這個,它就無法工作。 – 2015-07-21 17:39:05

4

我對上述主題的變化。這只是一個4x4的按鈕陣列。創建一個用戶表單並將其添加到其代碼中。相同的概念可以與您的標籤一起使用(或參見上一個答案):

Private cmdLots(20) As MSForms.CommandButton 

Private Sub UserForm_Initialize() 
For i = 1 To 4 
For j = 1 To 4 
    k = i + (4 * j) 
    Set cmdLots(k) = UserForm2.Controls.Add("Forms.CommandButton.1", "cmd1") 
    With cmdLots(k) 
     .Top = i * 25 
     .Left = (j * 80) - 50 
     .BackColor = RGB(50 * i, 50 * j, 0) 
     .Caption = "i= " & i & " j= " & j 
    End With 
Next j 
Next i 
End Sub 
相關問題