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

cs_Papymuzo 169 Messages postés jeudi 24 juillet 2003Date d'inscription 17 août 2010 Dernière intervention - 29 sept. 2009 à 09:10 - Dernière réponse : cs_Papymuzo 169 Messages postés jeudi 24 juillet 2003Date d'inscription 17 août 2010 Dernière intervention
- 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

Répondre au sujet
cs_Papymuzo 169 Messages postés jeudi 24 juillet 2003Date d'inscription 17 août 2010 Dernière intervention - 29 sept. 2009 à 09:37
+3
Utile
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 ;)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Papymuzo
cs_Ayr 221 Messages postés mercredi 9 avril 2003Date d'inscription 13 décembre 2009 Dernière intervention - 29 sept. 2009 à 12:29
+3
Utile
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+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Ayr
cs_Ayr 221 Messages postés mercredi 9 avril 2003Date d'inscription 13 décembre 2009 Dernière intervention - 29 sept. 2009 à 14:02
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Ayr
cs_Papymuzo 169 Messages postés jeudi 24 juillet 2003Date d'inscription 17 août 2010 Dernière intervention - 29 sept. 2009 à 12:51
0
Utile
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
cs_Papymuzo 169 Messages postés jeudi 24 juillet 2003Date d'inscription 17 août 2010 Dernière intervention - 29 sept. 2009 à 15:00
0
Utile
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

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.