Boucle For Each Avec des index dans certains controls

Résolu
PROTEUS91 Messages postés 156 Date d'inscription mardi 4 novembre 2003 Statut Membre Dernière intervention 28 décembre 2010 - 18 oct. 2008 à 15:00
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

8 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 oct. 2008 à 17:57
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 ...
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 oct. 2008 à 18:24
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


 
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 oct. 2008 à 15:32
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 .
0
PROTEUS91 Messages postés 156 Date d'inscription mardi 4 novembre 2003 Statut Membre Dernière intervention 28 décembre 2010
18 oct. 2008 à 15:43
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
0

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

Posez votre question
PROTEUS91 Messages postés 156 Date d'inscription mardi 4 novembre 2003 Statut Membre Dernière intervention 28 décembre 2010
18 oct. 2008 à 16:19
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
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
18 oct. 2008 à 16:59
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 oct. 2008 à 17:51
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...
0
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 [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
0
Rejoignez-nous