Pergunta

Estou escrevendo um programa que obtém dados do registro e, em seguida, adiciona caixas de grupo a um controle de tabulação e, na caixa de grupo, gostaria de criar tantos controles de rótulo (para exibir as informações do registro) quantos dados (pares de valores-chave) Eu obtive.Para fazer isso eu fiz esta função:

private void AddAllControl()
{
    GroupBox TestGroupBox = new GroupBox();
    TestGroupBox.AutoSize = true;
    TestGroupBox.Text = "valami";
    TestGroupBox.Height = 500;
    for (int i = 0; i < 21; i++)
    {
        Label TempLabel = new Label();
        TempLabel.Text = i.ToString();
        TempLabel.Location = new System.Drawing.Point(20 + i, 30);
        TempLabel.Show();
        TempLabel.Visible = true;
        TempLabel.Enabled = true;
        TestGroupBox.Controls.Add(TempLabel);               
    }
    tabPage_SandBox.Controls.Add(TestGroupBox);
}

Esta função é processada quando um botão é pressionado.Depois disso, a caixa de grupo aparece corretamente, mas apenas 1 rótulo do primeiro (com texto = 0) aparece em vez de 21 rótulos.Quando paro para depurar o programa vejo que todos os rótulos existem e todas as propriedades estão corretas, porém não aparecem.Deve haver algo que eu não percebi.E agora minha pergunta?O que eu fiz de errado?Como você pode ver, tentei os dois visible e enabled propriedade, mas nenhum deles me traz solução.

Foi útil?

Solução

Você tem que definir

  TempLabel.AutoSize = true;

E você tem que modificar o local um pouco como

 TempLabel.Location = new System.Drawing.Point(20 + 10 * i, 30);

ou acho que você deseja ter os rótulos um abaixo do outro, então você deve definir o local como

 TempLabel.Location = new System.Drawing.Point(20, 20+20 * i);

Outras dicas

Se seus rótulos tiverem um tamanho constante, então

TestGroupBox.Controls.Add(new Label()
{
    Text = i.ToString(),
    Location = new Point(20 + (i*20), 30),
    Size = new Size(20, 20)
});

Faria o truque

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top