>>C# effacer un label créé dynamiquement [Résolu]

Signaler
Messages postés
48
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
6 juillet 2007
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour a tous,

Je cré dynamiquement suite a un clic un nombre aleatoire de label, je fais donc ainsi :

for( v=0;v=var;v++)
{
Label lab_v = new Label();
Form2.ActiveForm.Controls.Add(lab_v);
}

Jusqu a la tout va bien.... Mais maintenant tout mes labels sont affiches. Je veux qu'en cliquant sur un bouton, ces labels disparaissent. Du genre lab_v.Visible=False.

Mais la ca marche plus, car dans mon code il ne reconnait pas lab_v, ni lab_1, lab_2... Ce qui parait plutot normal car il sont crees dynamiquement...
Je sais pas si je suis claire mais bon...

Merci d'avance
Feuillou

8 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
sinon si tu as beaucoup d'autres controles sur le form et que tu affiche/masque souvent tes Label ça pourrait valloir le coup d'avoir une collection à part juste pour les label dynamiques, histoire de ne pas parcourir la liste complete des controles à chaque fois

Cocoricoooooooo !!!!
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
14
j'aime bien ta nouvelle mascotte coq :o))

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
lol :-)

Cocoricoooooooo !!!!
Messages postés
48
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
6 juillet 2007
1
Merci encore coq, ta reponse convient parfaitement...
Feuillou
Messages postés
202
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
22 janvier 2009
1
Oué, mais la, son label est toujours la mais juste invisible, ya pas moyen de le supprimer totalement ? Il n'y aurait pas un truc du genre:
"label.Remove"
à la place du
"label.visible = false"
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
14
comme tu a un form.controls.add tu as le remove qui va avec...
il me semble...

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
exactement
par contre ne pas utiliser this.Controls.Remove dans le foreach sur this.Controls !

donc dans ce cas la meilleure solution d'apres moi est de passer par la collection séparée dont j'ai parler plus haut

le code ressemblerait donc à ceci :
private ArrayList labelsDynam;

private void AjouterLesLabels()
{
labelsDynam = new ArrayList();
int v;
for( v=0;v<=10;v++)
{
Label lab = new Label();
lab.Name = "lab_dyn_" + v; // nom : lab_dyn_0, lab_dyn_1, ...
...
labelsDynam.Add(lab);
}

Controls.AddRange( (Control[])labelsDynam.ToArray(typeof(Control)) );
}

private void RetirerLesLabels()
{
foreach ( Label label in labelsDynam )
{
this.Controls.Remove(label);
label.Dispose();
}
labelsDynam.Clear();
}



Cocoricoooooooo !!!!
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
lab_v ne donnera jamais lab_1, lab_2 etc dans le code
il faut que tu gère tout en dynamique

exemple (basique) :

création des Label :
Label lab = new Label();
lab.Name = "lab_dyn_" + v; // nom : lab_dyn_0, lab_dyn_1, ...
Controls.Add(lab);


leur masquage :
foreach ( object ctrl in this.Controls )
{
// si le controle est un Label
if ( ctrl.GetType() == typeof(Label) )
{
Label label = (Label)ctrl;
// si le label est bien un des Label dynamiques
if ( label.Name.StartsWith("lab_dyn_") )
label.Visible = false;
}
}


Cocoricoooooooo !!!!