Pergunta

Eu preciso criar etiquetas e botões dinamicamente e adicioná-los a um quadro dentro de um formulário. Como eu faço isso? Parece que deve ser mais fácil do que realmente é.

Foi útil?

Solução

O código a seguir demonstra como você pode preencher dinamicamente um quadro em um formulário de usuário com controles ...

Na forma que eu usei eu tinha um controle quadro chamado Frame1, assim, no UserForm_Initialize você chama Frame1.Controls.Add para incorporar um controle no quadro. Você pode definir o controle que é retornado a uma variável de controle WithEvents que você definiu no módulo de código UserForm para que possa responder a eventos em qualquer controles que você quer ...

Assim, com este método você precisa pré-escrever qualquer código de evento que você deseja para quaisquer controles que você criar ...

Observe também que você pode posição e tamanho seus controles, mesmo que o superior, esquerda, largura e propriedades de altura não necessariamente chegar em 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

Outras dicas

Meu variação sobre o tema acima. Este é apenas para uma matriz 4x4 de botões embora. Criar um formulário de usuário e adicioná-lo ao seu código. Os mesmos conceitos podem ser usados ??com as etiquetas (ou veja a resposta anterior):

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top