Treeview et la recherche recursive

cs_ghannem Messages postés 37 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 11 juin 2008 - 24 nov. 2004 à 21:47
cs_ghannem Messages postés 37 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 11 juin 2008 - 27 nov. 2004 à 00:07
salut j'aimerais bien savoir comment faire fonctionner une fonction recurusive pour avoir un treeview qui affiche les noeuds et les sous noeuds et les sous sous.. jusqu'a un niveau bien detreminé.

merci d'avance.

4 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
24 nov. 2004 à 22:25
même question, même réponse

Daniel
0
cs_ghannem Messages postés 37 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 11 juin 2008
25 nov. 2004 à 00:43
je sais mais tout simplement par ce que j'ai pas pu le faire.

est ce que tu peux me dire comment ecrire une fonction en vb6 qui retourne un tableau de chaine de caractere.

par ce que la procedure que j'utilise fonctionne mais le probleme c'etait avec le tableau qui sera en retour. qui quand je fais l'appel recursive de la procedure il m'affiche l'erreur 10 array fixed or temporarly locked. je crois que le probleme est dans le redimentionnelemnt du tableau.

je t'explique encore mieux. Ce que je veux faire c'est generer tous les fils des noeuds qui sont en fait des url dans un site web. en commencant par l'adresse de depart et generer les adresses qui en resultent.

la procedure que j'ai a comme entree l'"url", elle permet de stocker dans un tableau les adresses des pages auquelles fait appel la premiere url.

si je veux generer tous les urls jusquau niveau 5 dsn un treeview je fais comment j'ai pense a un appel recursive mais ca marche pas.

Est ce que tu peux m'aider.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
25 nov. 2004 à 01:51
j'essaye de comprendre et ça avance tout doucement....
pourquoi 5 niveaux, est-ce que toutes les adresses ont 5 niveaux exactement ou est-ce qu'elles peuvent faire plus ou moins ?
parceque dans mon exemple, il faut exactement le niveau demandé sinon elle ne sera pas générée.

le tableau doit être déclaré au niveau général pour être accessible (voir public si nécessaire ?)
Array fixed voudrait dire que le tableau a été déclaré avec une taille donc ne serait pas dynamique.
tableau temporarly locked, ça c'est pas très clair, voudrait dire qu'on est sorti trop tôt d'un bloc With et End With ...?

----- niveau général -----
'déclaration du tableau
Dim Tableau() As String
'taille maxi redimentionnée
Dim Tna As Integer
'nombre d'éléments dans le tableau
Dim Tnb As Integer

----- niveau appel de la Fonction -----
'appel de la Fontion
FirstNode 5
'redimentionnement avec la bonne taille
ReDim Preserve Tableau(Tnb)
'édition du résultat (ça risque d'être long)
'faut faire un Dim x As Integer
For x = 1 To Tnb
MsgBox Tableau(x)
Next

----- recherche du premier Node -----
Private Sub FirstNode(Level As Long)
    Dim nod1 As Node
    Dim nod2 As Node
'changer le nom TreeView1 si nécessaire
'on commence à partir d'un Node quelconque 
    Set nod1 = TreeView1.SelectedItem
'on boucle de parent en parent
    Do While (nod1 Is Nothing) = False
       Set nod2 = nod1
       Set nod1 = nod1.Parent
       Loop
'on remonte au premier  
'et on appelle directement la 2eme Fonction
    ShowNodes nod2.FirstSibling, Level
End Sub


----- recherche des noeuds jusqu'au niveau demandé -----
Private Sub ShowNodes(N As Node, Level As Long)
's'il n'y a rien on fait rien
'sinon il faudrait peut être mettre en table aussi (adresses avec moins de 5 niveaux...?)
    If Not N Is Nothing Then
       If Level > 1 Then
'on n'a pas encore atteint le niveau
'on développe le noeud
          N.EnsureVisible
'on va chercher le niveau plus bas
          ShowNodes N.Child, Level - 1
          Else
'ici on a atteint le niveau
'on ferme les noeuds de niveau inférieur
          N.Expanded = False
'je commence l'indice à un
          Tnb = Tnb + 1
'je redimentionne de 20 en 20 pour aller plus vite
          If Tnb > Tna Then Tna = Tna + 20: ReDim Preserve Tableau(Tna)
'en principe ici on doit avoir l'adresse complète de l'URL
          Tableau(Tnb) = N.FullPath
          End If
'il ya peut être d'autres enfants avec le même niveau
       ShowNodes N.Next, Level
       End If
End Sub


Daniel
0
cs_ghannem Messages postés 37 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 11 juin 2008
27 nov. 2004 à 00:07
JM'ai regle l'affaire du tableau mainteant la fonction peut etre recursive puisqu'elle fait ce qu'on lui demande mais ...

la facon dont je l'ai appele travaille comme suit. j'arrive a charger les noeud de l'arbre (racine) je developpe l'arbre pour ses noeuds fils ensuite je sais pas pq le parcours se fait toujours sur le premier noeud de chaque bniveau et il oublie les autre noeuds

racine
fils1
s-fils1
s-fils1
s-fils2
...
s-fils2
s-fils3
...
fils2
fls3
...

Tu voies il me donne un truc comme ca pq il developpe les autre noeuds s-fils1 et 2 du troisiemme niveau ainsi que fils2 et fils1 du deuxieme niveau .

si j'arrive a faire fonctionner cabiensure avec ton aide si t'a une idée je vais pourvoir appliquer ca sur n'importe qel niveau.

Merci d'avance.
0
Rejoignez-nous