Boucle for sur un composant possible ? [Résolu]

Signaler
Messages postés
21
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2010
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
Bonjour,

je souhaiterais savoir si il était possible de mettre la valeur d'une variable sur un composant afin de l'incrémenter comme par exemple :

- composant utilisé : imgToto (nom du composant Image) et je pars du principe que j'ai 10 images (imgToto1 ; imgToto2 ... imgToto10)

dim i as integer
for i=1 to 10
   imgToto(i).width=36
next i

Après un essai Visual Basic m'informe Fonction incorrecte (car la parenthèse de imgToto(i) indique évidemment qu'il s'agit d'une fonctionne et non d'une variable. Y aurait il une solution à mon problème ?

13 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Oups ...
For i = 0 to 9 '10-1
  Set Me.imgToto(i).Picture = Me.imgIco.ListImages(i)
Next i
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
On dit une fonction, pas une foncionne !
En fait tu dois mettre la propriété Index à 0 et à partir de ce moment, tu peux les adresser comme tu voulais le faire.
Tu peux aussi en placer un seul sur le form avec un index à 0 et charger les autres dynamiquement en modifiant leur position ainsi que leur taille sur le form ...
Messages postés
21
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2010

Erreur de frappe pour le "fonctionne"

Merci pour ta réponse, je fais une tentative et reviens valider ta réponse si c'est bon.
Messages postés
21
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2010

Après avoir modifié mes index à 0 dans les propriétés de mes imgTotox, j'ai toujours un message me disant qu'il s'agit d'une "fonction" : 

- composant utilisé : imgToto (nom du composant Image) et je pars du principe que j'ai 10 images (imgToto1 ; imgToto2 .. imgToto10),
- composant utilisé : imgIco (nom du composant ImageList) qui comprend 10 images avec des index de 1 à 10.

sub affiche_img ()
   Dim i as Integer
   For i = 1 To 10
      imgToto(i).Picture = imgIco.ListImages(i).Picture
   Next i
end sub

J'ai tenté de passer une variable en argument de ma fonction mais j'ai le même message disant que imgToto est une fonction non définie.
La manipulation est-elle différente du fait que je charge une image à partir du composant ImageList ?
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
L'index doit commencer à 0 :
For i = 0 to 9 '10-1

  Set Me.imgToto(i).Picture = Me.ImageList1.ListImages(i)

Next i
Messages postés
21
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2010

J'ai encore le même message (j'ai créé un nouveau projet pour tester) me disant que imgToto(i) est une fontion non définie.

j'ai utilisé dans mon nouveau projet :
-composants : 
   * Microsoft Windows Common Control 6 pour avoir mon composant ImageList
   * ImageList (nommé imgIco au quel j'ai ajouté deux images avec Index= 1 et Index=2 dans les propriétés)
   * Image (nommé imgToto1 et un autre nommé imgToto2 avec tous les deux la propriété Index à 0)
et j'ai ensuite mis dans mon code :

Private Sub Form_Load()
    Dim i As Integer
    For i = 0 To 9 '10-1
      Set imgToto(i).Picture = imgIco.ListImages(i)
    Next i
End Sub

j'ai également tenté en mettant le code suivant :

Private Sub Form_Load()
    Dim i As Integer
    For i = 0 To 9 '10-1
      Set imgToto(i).Picture = imgIco.ListImages(i).Picture
    Next i
End Sub

et j'ai le même résultat négatif.
Messages postés
21
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2010

j'ai oublié de préciser : si je mets le "Me." devant les imgToto(i) j'ai un message "Methode ou membre de données introuvable"
Messages postés
21
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2010

Ca y est j'ai enfin trouvé ! Afin de palier aux différents problèmes j'ai mis ceci dans le code :

Private Sub Form_Load()
    Dim i As Integer
    For i = 0 To 9 '10-1
      Set imgToto(i).Picture = imgIco.ListImages(i+1).Picture
    Next i
End Sub

Merci pour ton aide ghuysmans99 !
Messages postés
21
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2010

Maintenant me reste à mettre en application ton idée : "Tu peux aussi en placer un seul sur le form avec un index à 0 et charger les autres dynamiquement en modifiant leur position ainsi que leur taille sur le form" !

uhhh...
Existe-t-il une instruction pour créer un "composant" ?
Messages postés
21
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2010

Solution à ma réponse précédente au cas ou ça peut servir à quelqu'un :

Load Me.imgToto(i)

[ SUJET CLOS]
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Je sais pourquoi je m'étais trompé : je partais du principe que l'index commençait à 0 (ce qui est logique : on commence normalement toujours à 0).
Messages postés
21
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2010

Mais merci pour tes instructions qui m'ont bien guidée !
Je vais maintenant me pencher sur l'attribution d'une fonction lorsque l'on clique sur un des composants générés dynamiquement...
A bientôt
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
C'est dans le code du bouton : le paramètre Index contient l'index du bouton où on a cliqué.