Manipuler plusieurs labels en même temps [Résolu]

Signaler
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010
-
Giggs56
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010
-
Bonjour à tous,
J'ai dans mon programme une groupbox avec à l'intérieur 10 labels.
Je souhaiterais manipuler les labels (avec les fonctions Hide et Show) mais en utilisant une méthode qui évite de manipuler les labels un par un.
Je programme avec Visual Basic 2008.
Merci de votre aide.

7 réponses

Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
27
La collection 'Controls' prend en compte les contrôles dans l'ordre du concepteur de vue (l'ordre inverse dans lequel ils ont été créés, voir fichier : NomFormulaire.Designer.vb).

Je pense qu'il veut afficher les labels dont le texte est "A" dans ce cas ce sera :

For Each Label In GroupBox1.Controls
    Label.Visible (Label.Text "A")
Next


Autre chose, avec ce code, la variable 'Label' est de type 'Control', l'opération fonctionnera alors pour tous les types de contrôles insérés dans le groupbox, si tu insère un bouton il ne sera donc pas visible si son texte n'est pas "A"

Si tu dois ajouter d'autres types de contrôles dans ce groupbox tu peux utiliser la condition suivante :

If TypeOf(Objet) Is Label Then
End If


Ce qui nous donne :

For Each C As Control In GroupBox1.Controls
    If TypeOf (C) Is Label Then
         DirectCast(C, Label).Visible (DirectCast(C, Label).Text "A")
    End If
Next


Bien qu'ici le DirectCast ne soit pas une obligation car seule les propriétés de bases du Label sont utilisés (Text et Visibledéjà présentes dans la classe 'Control' de base). Mais c'est plus propre et cela permet de mieux appréhender le concept en cas de contrôles avec des propriétés plus étendues.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
47
Salut
For Each Label In GroupBox1.Controls
            Label.visible = True
        Next
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
47
Je corrige
 For Each Label In GroupBox1.Controls
            Label.show()
'ou          Label.hide()
        Next
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010

ok merci c'est exactement ce qu'il me fallait
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010

Juste une dernière question : dans mes 10 labels, j'ai 5 labels dont le text = "A" et 5 autres dont le text = "B".
Je voudrais utiliser votre méthode pour faire :
For Each Label In GroupBox1.Controls
Show('Tous les labels dont le text = "A")
Next

Est-ce possible ? Si oui, merci de m'indiquer la méthode.
Merci de votre aide.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
47
Bonsoir
Tu veux que 5 label avec a et 5 avec b
Quel label vont avoir "a"
le for each passe sur toute les labels du groupebox mais je ne sais pas dans quel ordre
j'ai essayé ça

Dim i As Integer
        i = 1
        For Each Label In GroupBox1.Controls
            If i < 6 Then
                Label.text = "a"
            Else
                Label.text = "b"
            End If
            i = i + 1
            Label.show()
        Next

avec le debugg j'ai constaté que le for each commençait par le dernier label c.a.d le dernier que tu as mis sur le form
et ensuite dans l'ordre décroissant
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010

Ok merci de votre aide à tous, mon problème est désormais résolu.