2015-03-30 1 views
0

// Ici, je crée les étiquettes lors de l'exécution en un seul clicC# Comment changer la propriété visible d'une étiquette créée lors de l'exécution

Label[] labels = new Label[countresult]; 

for (int i = 1; i < countresult; i++) 
{ 
    labels[i] = new Label(); 
    labels[i].Font = new Font("Arial Rounded MT Bold", 30); 
    labels[i].ForeColor = System.Drawing.Color.Red; 
    labels[i].AutoSize = true; 
    labels[i].Text = ""; 

    //Here I try to assign the value visible = true 

    labels[i].Visible = true; 
    labels[i].TabIndex = i; 
} 

// Dans un vide privé d'un timer tick J'assigne le nom de étiquette var "a" et je fais les 3 méthodes

string a = string.Format("labels[{0}]", labelscount); 

// 1ère méthode

if (this.Controls.ContainsKey(a)) 
{ 
    this.Controls[a].Visible=false; 
} 

// 2ème méthode

foreach (Control control in Controls) 
{ 
    if (control.Name == a) 
    { 
     control.Visible = false; 
    } 
} 

// 3ème méthode

if (this.Controls[a] is Label) this.Controls[a].Visible=false; 
labelscount++; 

Malheureusement, aucun fonctionne.

Quelqu'un sait ce qui s'est passé?

+0

étiquettes [i] .Visible = false; Avez-vous essayé d'appeler cela spécifiquement? – hogarth45

+0

Avez-vous réellement ajouté les étiquettes à un contrôle parent? –

+0

Oui, j'essaie cela, mais dire le nom n'existe pas dans le contexte actuel –

Répondre

1

Vous ne ajoutez pas les étiquettes au contrôle propriétaire. Donc, ils ne seront jamais affichés. Donc dans votre boucle vous devez ajouter ce qui suit comme dernière ligne ...

this.Controls.Add(labels[i]); 
+0

j'utilise que dans le prochain pour rien, regardez: for (int i = 0; i

+0

Utilisez un index dans la collection de contrôles et non un nom de chaîne. Utilisez donc un nombre pour obtenir un contrôle de la collection, this.Controls [3], plutôt que par nom. –

+0

Vous avez absolument raison. c'était la solution !! @ phil-wright merci beaucoup !!! –