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

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

Votre réponse

5 réponses

Meilleure réponse
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Dernière intervention
17 août 2010
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 ;)

Merci cs_Papymuzo 3

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

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_Papymuzo
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
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+

Merci cs_Ayr 3

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

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_Ayr
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
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

Merci cs_Ayr 3

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

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_Ayr
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Dernière intervention
17 août 2010
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
Dernière intervention
17 août 2010
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

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.