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

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

cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 31 août 2004 à 18:14
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
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 1 sept. 2004 à 09:35
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
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 1 sept. 2004 à 10:27
0
Merci
lol :-)

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