Domanda

Ho bisogno di creare etichette e pulsanti in modo dinamico e quindi aggiungerli ad un frame all'interno di un form utente. Come faccio a fare questo? Sembra che dovrebbe essere più facile di quanto non lo sia in realtà.

È stato utile?

Soluzione

Il codice seguente dimostra come è possibile popolare dinamicamente un fotogramma in un form con i controlli ...

Nella forma che ho usato ho avuto un controllo frame chiamato Frame1, così nel UserForm_Initialize si chiama Frame1.Controls.Add di incorporare un controllo nel telaio. È possibile impostare il controllo che viene inviato ad un WithEvents controllare variabile che si è definito nel modulo di codice form in modo da poter rispondere a eventi su tutto ciò che controlli che si desidera ...

Quindi, con questo metodo è necessario pre-scrivere alcun codice evento che si desidera per tutti i controlli creati ...

Si noti inoltre che è possibile posizionare e dimensioni i controlli, anche se l'alto, a sinistra, larghezza e height non devono essere necessariamente in intellisense ...

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

Altri suggerimenti

La mia variazione sul tema di cui sopra. Questo è solo per una matrice 4x4 di pulsanti però. Creare un form e aggiungere questo al suo codice. Gli stessi concetti possono essere utilizzati con le etichette (o vedere la risposta precedente):

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top