Visual Basic - Pointeur vers un objet

Fermé
santiago69 Messages postés 477 Date d'inscription mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 - 9 avril 2003 à 09:42
 YAKA - 9 avril 2003 à 18:07
Bonjour,

Je cherche a construire une arbre a profondeur variable.

Le type de base est le suivant :
Type BoxTree
Index as long 'Valeur du noeud
Count as long 'Nombre de fils
List() 'Liste des fils
End Type

Si Obj est de type BoxTree, je voudrais pouvoir placer dans Obj.List(i) de nouveaux objets de type BoxTree.
Me suis je bien fait comprendre, l'arbre est compose de noeud qui ont chacun une valeur et un tableau de noeuds fils.

Probleme : d'une part, je ne peux pas definir explicitement List() comme contenant des objets BoxTree car il y aurait une reference circulaire dans le type BoxTree ; d'autre part, si je garde un type variant, et que j'essaie d'inserer un objet BoxTree dans List(i) j'obtient une erreur de compilation.

Le code est le suivant : On suppose que Pere est un noeud de valeur 123, il a deja n fils ; on va lui ajouter un fils qui va prendre pour valeur le noeud appele Fils de valeur 456.

Sub TestBoxTree()

Dim Pere as BoxTree
Pere.Index = 123
Dim Fils as BoxTree
Fils.Index = 456

Pere.Count = Pere.Count + 1
ReDim Preserve Pere.List(1 to Pere.Count)
Pere.List(Pere.Count) = Fils

End Sub

L'erreur se situe a la derniere ligne et le message est le suivant : Seuls les types definis par l'utilisateur et qui sont

definis dans les modules d'objets publics peuvent etre convertis depuis ou vers un variant, ou passes a des fonctions a liaison tardive

Il semble que la solution consiste a definir le type BoxTree dans un module de classe... Mais voila, je ne sais ni ne trouve comment faire un module de classe.

Merci a tous ceux qui pourraient m'aider.

Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.
A voir également:

4 réponses

teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
9 avril 2003 à 10:06
Mmmm, j'ai peur que ce que tu demandes a VB6 depasse ses competences...
Pour faire un module de classe neamoins tu peux juste cliquer avec le bouton droit sur ton projet et faire new/class module...

.  .
\_/
0
santiago69 Messages postés 477 Date d'inscription mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 209
9 avril 2003 à 10:22
Certes, je suis capable de creer un module de classe, mais comment dois-je le remplir pour creer les instances, les proprietes et les methodes des objets ?


Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
9 avril 2003 à 10:40
Ben "normalement":

Private m_lGeneralFlags As Long
Public m_strGUID As String

Private Sub Class_Initialize()
On Error Resume Next
'Constructeur
End Sub

Private Sub Class_Terminate()
On Error Resume Next
'Destructeur
End Sub

Public Function Alpha( ) As Object
Set Alpha = Nothing
'Blabla....
End Function

.  .
\_/
0
beldyn Messages postés 188 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 1 février 2005 19
9 avril 2003 à 12:53
Salut,
Voici un autre exemple:

Private Sub Class_Initialize()
On Error GoTo Erreur
Set WFind = New Word.Application
CompteurErreur = 0
Exit Sub
Erreur:
Alerte "L'initialisation de l'objet Word a échouée", "ZWordFind", vbCritical
MsgBox "L'applcation va se terminer", vbOKOnly, "ZWordFind"
End
End Sub

Private Sub Class_Terminate()
On Error GoTo Erreur
WFind.Visible = True
WFind.Quit
Set WFind = Nothing
Exit Sub
Erreur:
If Err.Number = 462 Then
Resume Next
Else
AlerteC "Class_Terminate", "ZWordFind", vbCritical
End If
End
End Sub

'Pour les propriété:
'recupération de la valeur
Public Property Get LibelleOrdinateur() As String

'affectation de valeur
Public Property Let SetParent(Fenetre As Long)

'exemple:
Private CaptionOrdinateur As String
Private CaptionRepertoire As String

Public Property Let LibelleOrdinateur(Nom As String)
CaptionOrdinateur = Nom
End Property

Public Property Get LibelleOrdinateur() As String
LibelleOrdinateur = CaptionOrdinateur
End Property

Public Property Let LibelleRepertoire(Nom As String)
CaptionRepertoire = Nom
End Property

Public Property Get LibelleRepertoire() As String
LibelleRepertoire = CaptionRepertoire
End Property

Voilà, j'espere que ce t'aidera. Autre chose, plutot que le type variant, tu peux aussi utiliser le type Object.
A++

Beldyn,
0
Peut etre devrais tu explorer l'article que j'ai écris sur ce site:
http://www.c2i.fr/code.asp?IDCode=1093&type=2&IDCate=11&Cate=Classes

Il presente une certaine facon de faire des collections de collections de collections de .... classes.
Je n'ai pas le temps de regarder en profondeur (des que je peux je ferai) mais mon article devrais au te donner des idees.
A+
0