Remplir le contrôle avec un ensemble d'étiquettes
-
21-12-2019 - |
Question
J'écris un programme qui récupère les données du registre, puis ajoute des zones de groupe à un contrôle de tabulation, et dans la zone de groupe, j'aimerais créer autant de contrôles d'étiquette (pour afficher les informations du registre) que de données (paires clé-valeur) J'ai eu.Pour ce faire j'ai créé cette fonction :
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);
}
Cette fonction est traitée lorsqu'un bouton a été enfoncé.Après cela, la zone de groupe apparaît correctement, mais seulement 1 étiquette la première (avec texte = 0) apparaît au lieu de 21 étiquettes.Lorsque j'arrête de déboguer le programme, je vois que toutes les étiquettes existent et que toutes les propriétés sont correctes, mais elles n'apparaissent pas.Il doit y avoir quelque chose que je n'ai pas remarqué.Et maintenant ma question ?Qu'est-ce que j'ai fait de mal ?Comme vous pouvez le voir, j'ai essayé les deux visible
et enabled
propriété mais ni l'un ni l'autre ne m'apportent de solution.
La solution
Vous devez définir
TempLabel.AutoSize = true;
Et il faut modifier un peu l'emplacement comme
TempLabel.Location = new System.Drawing.Point(20 + 10 * i, 30);
ou je pense que vous voulez avoir les étiquettes les unes en dessous des autres, vous devez donc définir l'emplacement comme
TempLabel.Location = new System.Drawing.Point(20, 20+20 * i);
Autres conseils
Si vos étiquettes ont une taille constante, alors
TestGroupBox.Controls.Add(new Label()
{
Text = i.ToString(),
Location = new Point(20 + (i*20), 30),
Size = new Size(20, 20)
});
Ferait l'affaire