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

Résolu
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 à 09:10
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-

5 réponses

cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 1
29 sept. 2009 à 09:37
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 ;)
3
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
29 sept. 2009 à 12:29
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+
3
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
29 sept. 2009 à 14:02
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
3
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 1
29 sept. 2009 à 12:51
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 :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 1
29 sept. 2009 à 15:00
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
0
Rejoignez-nous