Boucle For Each Avec des index dans certains controls [Résolu]

Messages postés
156
Date d'inscription
mardi 4 novembre 2003
Statut
Membre
Dernière intervention
28 décembre 2010
- - Dernière réponse : PROTEUS91
Messages postés
156
Date d'inscription
mardi 4 novembre 2003
Statut
Membre
Dernière intervention
28 décembre 2010
- 18 oct. 2008 à 19:39
Bonjour,

Je pose cette question, car je ne vois pas de solution à mon problème. Peut être que l'un d'entre vous pourra m'aider.

Voilà, j'ai une form dans laquelle j'ai plusieurs objet, des boutons, des ListBox, des TextBox, des labels etc...

Ce que je veux faire c'est lister le "Caption" pour tous ces objets donc pour cela je fait :

For Each ObjectCurrency In Me.Controls
     List1.AddItem ObjectCurrency.Name
     List2.AddItem ObjectCurrency.Caption
Next

(Au préallable j'ai testé si l'objet avait bien la propriété de "Caption")

Ca marche niquel mais le problème c'est que quand il rencontre les labels il ne m'en liste qu'un. Les labels sont crée sur ma form avec un Index exemple :

Label2(0)
Label2(1)
Label2(2)
Label2(3)

Je ne sais pas comment faire pour qu'il me liste les captions de tous ces index, je ne sais vraiment pas comment faire si vous avez une idée...

Merci d'avance à vous.

PROTEUS
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
3
Merci
Essaye ceci et tu vas comprendre :

For Each objectcurrency In Me.Controls
  On Error Resume Next
    List1.AddItem objectcurrency.Name & "(" & objectcurrency.Index & ")"
 Next

J'ai mis ici un on error resume next pour ne pas avoir à m'occuper de tes autres contrôles (qui ne figureront pas dans ta liste, donc...)
A toi de gérer comme tu l'entends (par exemple en utilisant TypeOf, ou même le nom des contrôles indexés dans une If ...)
Tu devrais t'en sortir sans problème, pour peu que tu y réfléchisses un peu ...

Dire « Merci » 3

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

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

Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
3
Merci
Alles, va ...


C'est Samedi, alors ...


Voilà une manière ... essaye :



Private Sub Command1_Click()
  Dim objectcurrency As Control
  For Each objectcurrency In Me.Controls
    If voyons_si_groupe(objectcurrency) Then
      List1.AddItem objectcurrency.Name & "(" & objectcurrency.Index & ")"
    Else
      List1.AddItem objectcurrency.Name
    End If
  Next
End Sub

Private Function voyons_si_groupe(ctrl As Control) As Boolean
  voyons_si_group = False
  On Error GoTo 10
  If ctrl.Index >= 0 Then
    voyons_si_groupe = True
  End If
10:
End Function


 

Dire « Merci » 3

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

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

Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Bonjour,

Comme tout marche chez moi, je suppose que tu as fait une erreur ailleurs ou que tu as donné le même caption à tous les labels de ce groupe .
Commenter la réponse de jmfmarques
Messages postés
156
Date d'inscription
mardi 4 novembre 2003
Statut
Membre
Dernière intervention
28 décembre 2010
0
Merci
Hello merci d'avoir repondu aussi vite.

For Each ObjectCurrency In Me.Controls
     List1.AddItem ObjectCurrency.Name     'La il appel un item pas un groupe
     List2.AddItem ObjectCurrency.Caption  'Idem ici
Next

Mon probleme c'est que je ne sais pas comment gerer les groupes, si je fais ca :
for I = 0 to ObjectCurrency.ubound         'J'ai deja une erreur ici ou il me dit que l'objet ne gere pas cette propriété
     List1.AddItem ObjectCurrency(i).Name  'Et un autre erreur ici.
     List2.AddItem ObjectCurrency(i).Caption
Next i

PROTEUS
Commenter la réponse de PROTEUS91
Messages postés
156
Date d'inscription
mardi 4 novembre 2003
Statut
Membre
Dernière intervention
28 décembre 2010
0
Merci
En fait il y a meme un deuxieme probleme qui peut etre est issu du premier. En fait une fois que j'ai listé les objets dans la listbox, J'enregistre le contenu de la listbox dans un fichier, et en fait le truc c'est que dans une autre procedure pour des raisons X je recharge ce fichier dans une listbox et il boucle la liste pour modifier le caption de tous les noms d'objet enregistrer dans la listebox.

Probleme c'est que meme si j'arrive a enregistrer dans la Listbox le nom Label2(0) je n'arriverai jamais a le recharger avec cette ligne de code.

ObjectCurrency = ListBox1.text
ObjectCurrency.Caption = "TOTO"

Pour les objets sans index ca marche sans probleme mais quand j'aurai resolu le probleme de l'acquisition des noms d'index (voir le probleme ci dessus) j'aurai encore le probleme de gerer les index pour la modification du caption....

Je sias pas si je suis clair en tout cas je l'espere.

PROTEUS
Commenter la réponse de PROTEUS91
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
0
Merci
bonjour
la solution serait de ne pas avoir de labels indexés
si tu ne peux pas parce que tu utilise les index ailleurs dans ton code  il faut alors faire une boucle juste sur tes labels pour pouvoir récupérer le .caption de chaque index

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Commenter la réponse de pile_poil
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Je répète donc :
1) le code (ton tout premier) est bon tel qu'il est
2) le nom d'un contrôle faisant partie d'un groupe de contrôles indexés est le même pour chaque contrôle du groupe
Ainsi  Label1(2) a pour nom Label1, tout comme Label1(1) ou label1(0) ...
0, 1 et 2 sont des indices dans le groupe et ne font pas partie du nom du contrôle...
Commenter la réponse de jmfmarques
Messages postés
156
Date d'inscription
mardi 4 novembre 2003
Statut
Membre
Dernière intervention
28 décembre 2010
0
Merci
Bonjour [auteur/JMFMARQUES/615490.aspx jmfmarques],

Merci vraiment pour l'aide que tu m'as apportée je pensais être pas loin de la solution sans savoir que ca pouvait etre aussi simple. Je te remerci encore de m'avoir aidé aussi rapidement.

PROTEUS
Commenter la réponse de PROTEUS91