Bug Affichage label !!!

Vince62290 Messages postés 18 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 25 décembre 2010 - 25 déc. 2010 à 01:57
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 27 déc. 2010 à 10:57
Bonsoir à tous,

un bug trop bizarre pour ma part.

Le but : rendre transparent une série de label sur un picturebox (le picture box est dans une form).

Mon problème : la méthode bourrin marche mais pas la méthode intelligente...

Méthode bourrin :
pour chaque label (j'en ai une quarantaine...), j'écris :
label.Parent = Picturebox;

Méthode intelligente (marche que pour certains labels) :

foreach (Control lab in this.Controls)
{
if (lab is Label)
{
lab.Parent = pbanomalie;
}
}


Pourrait-on m'expliquer ?

Car je fais une appli assez conséquente, donc j'évite au max de "gâcher" des lignes de code.

Ps : tous les labels ont leurs propriétés équivalentes (même valeur pour chaque propriété)

MERCI D'AVANCE !

2 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
27 déc. 2010 à 09:22
Hello,
Bah, comme ça, la seule différence est dans l'affectation:
dans un cas, tu mets
label.Parent = PictureBox;

et dans l'autre:
lab.Parent = pbanomalie;


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
27 déc. 2010 à 10:57
Salut

Comme dit buno, tu ne choisis pas le même parent dans tes deux méthodes.

De plus, la liste this.Controls ne contient que les contrôles attachés directement à la fenêtre (dont ils sont les enfants directs).
Si tu veux avoir tous les éléments attachés à la fenêtre ou à d'autres composants attachés à la fenêtre, il faut que tu fasses une fonction récursive :

void AttacheLabels(Control racine, Control nouveauParent)
{
    foreach(Control ctrl in racine.Controls)
    {
        if(ctrl is Label)
        {
            ctrl.Parent = nouveauParent;
        }
        else
        {
            AttacheLabels(ctrl, nouveauParent);
        }
    }
}


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
Rejoignez-nous