Récupérer tous les memes controles d'un formulaire [Résolu]

Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
- - Dernière réponse : cs_Papymuzo
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
- 29 sept. 2009 à 15:00
Bonjour à tous et à toutes,

Voici mon problème (auquel je n'ai trouvé aucune solution..) :

Comment récupérer une liste de tous les contrôles de même type présents sur un formulaire ?

Par exemple, j'aimerai avoir un tableau contenant tous les Labels d'un formulaire.

Le but est de faire une unique boucle pour changer la couleur des labels, la police, la couleur de fond, etc.

Merci d'avance,

-Papymuzo-
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
1
3
Merci
J'ai trouvé la réponse !

Le but est de parcourir 1 à 1 les éléments du formulaire et de regarder leur Type grâce à TypeOf :

***
*****
***

Dim LabelForeColor As String
Dim LabelBackColor As String

'... Je cache les lignes où je récupère la valeur de la couleur dans une base Access

'On parcourt la liste des éléments du formulaire Frm
For i = 0 To Frm.Controls.Count - 1

If TypeOf Frm.Controls(i) Is Label Then 'Si c'est un Label

Frm.Controls(i).ForeColor = Color.FromName(LabelForeColor) 'Je fais Color.FromName car ça permet de convertir un String en System.Drawing.Color

Frm.Controls(i).BackColor = Color.FromName(LabelBackColor) 'Idem

End If

Next

***
*****
***

Voila ;)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Papymuzo
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
3
Merci
Bonjour Papymuzo,

En considérant que la routine se trouve dans la form ou se trouvent les labels, tu as cette solution aussi. Sinon remplacer Me par le nom de la form en question.

For Each Item In Me.Controls
  If typeOf Item Is System.Windows.Forms.Label Then
      With CType(Item, System.Windows.Forms.Label)
        .ForeColor = Color.FromName(LabelForeColor)
        .BackColor = Color.FromName(LabelBackColor)
      End With
  End If
Next Item


Même résultat mais semblerai plus rapide.
Ceci dit, significatif sur un (très) grand nombre de contrôles.

A+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Ayr
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
3
Merci
En fait c'est le For Each qui est plus rapide que le parcours de manière indexée.

Mais tu peux tout à fait intégrer le code dans une fonction ou procédure.

Public Sub LabelsColors(ByVal frm As System.Windows.Forms.Form)
  For Each Item In frm.Controls
    If TypeOf Item Is system.windows.forms.label then
        With CType(Item, System.Windows.Forms.Label)
          .ForeColor = Color.FromName(labelforecolor)
          .BackColor = color.fromname(labelbackcolor)
        End With
    End If
  Next Item
End Sub


Mais bon, encore une fois, c'était juste pour donner une autre possibilité. Ou au choix pour la ramener

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Ayr
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
1
0
Merci
Salut,

Oui en effet c'est plus rapide avec Me, cependant j'ai oublié de préciser que j'ai mis mon bout de code dans une fonction qui passe un formulaire en paramètre :p

Merci pour ta réponse :)
Commenter la réponse de cs_Papymuzo
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
1
0
Merci
Mdr, en tout cas je te remercie parce qu'il est vrai que j'utilise jamais le For..Each... parce que je sais pas m'en servir :p
Commenter la réponse de cs_Papymuzo