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

Messages postés
48
Date d'inscription
mercredi 31 mars 2004
Dernière intervention
6 juillet 2007
- - Dernière réponse : cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 2 sept. 2004 à 13:58
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
Afficher la suite 

Votre réponse

8 réponses

Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
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 !!!!
Commenter la réponse de cs_coq
Messages postés
1183
Date d'inscription
mercredi 21 janvier 2004
Dernière intervention
6 septembre 2011
0
Merci
j'aime bien ta nouvelle mascotte coq :o))

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Commenter la réponse de Arthenius
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
lol :-)

Cocoricoooooooo !!!!
Commenter la réponse de cs_coq
Messages postés
48
Date d'inscription
mercredi 31 mars 2004
Dernière intervention
6 juillet 2007
0
Merci
Merci encore coq, ta reponse convient parfaitement...
Feuillou
Commenter la réponse de feuillou
Messages postés
202
Date d'inscription
jeudi 24 juin 2004
Dernière intervention
22 janvier 2009
0
Merci
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"
Commenter la réponse de cs_AshenShugar
Messages postés
1183
Date d'inscription
mercredi 21 janvier 2004
Dernière intervention
6 septembre 2011
0
Merci
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..."
Commenter la réponse de Arthenius
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
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 !!!!
Commenter la réponse de cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
-2
Merci
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 !!!!
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.