Collection classes et "For each"
Bonjour,
je suis en train de faire un test avec des collections.
voilà, j'ai une classe "obj" toute simple sans truc particulier.
j'ai par exemple une methode "truc()".
Ensuite je veux créer une classe "Dossier" qui devra stocker des "obj".
et etre capable de m'en retrouner une collection. un peu comme le Folder.Files du FSO Folder etant le Dossier et Files me retourne une collection de file (obj chez moi)
voici donc comment j'ai commencé (je debute avec les collection ;) )
code de la classe dossier
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
' données membres
Private lstobj As Collection
' constructeur
Private Sub Class_Initialize()
Set lstobj = New Collection
End Sub
' destructeur
Private Sub Class_Terminate()
Set lstobj = Nothing
End Sub
' membres classiques... d'accés à la collection
Public Property Get Item(AValue As Variant) As Obj
Set Item = lstobj.Item(AValue)
End Property
Public Property Get Count() As Long
Count = lstobj.Count
End Property
Friend Sub Append(ByRef o As Obj)
lstobj.Add o ' ajoute dans la collection
End Sub
' pour generer des membres...
Public Sub generer(ByVal n As Long)
Dim x As Obj
For i = 1 To n
Set x = New Obj
x.nom = "généré " & i 'un exemple
x.v = Sin(i) 'un exemple
lstobj.Add x
Next
End Sub
'Public Function GetObjs() as ....?
'???
'End function |
voilà jusque là ca marche bien.
dans mon form, je fais ceci :
Code:
1 2 3 4 5 6 7
| Dim d As Dossier
Set d = New Dossier
d.generer 5
For Each bidule In d.GetObjs
bidule.truc()
Next |
Premiere question, comment je fait mon "GetObjs" ?
Deuxieme question, est-ce que je suis obligé de passer par un "GetObjs", n'est-il pas possible d'avoir un truc qui marche avec "For Each bidule in d" ?
pour info (mais ca ne sert a rien dans l'exemple) voici le code de la classe obj :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 'code bidon pour l'exemple
Public nom As String
Public x As Long
Public Function truc() As Long
Debug.Print "truc! sur" & nom
truc = 2 * x
End Function
Public Property Get v() As Long
v = x
End Property
Public Property Let v(a As Long)
x = Abs(a)
End Property |
Merci.