[VB2005 ]Parcourir tous les noeuds d'un treeview [Résolu]

Signaler
Messages postés
59
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
9 août 2007
-
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
30 janvier 2013
-
Bonjour à tous,

Comment faire pour parcourir l'ensemble des noeuds d'un treeview afin de récupérer la propriété Tag de chacun d'entre eux ?

Merci et bon week-end

Ludo

15 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
Peut-etre quelque chose du genre :

        'Pour chaque noeud parent du treeview
        For Each toto As TreeNode In TreeView1.Nodes
            'Pour chaque noeud enfant du noeud parent
            For Each titi As TreeNode In toto.Nodes
                ...................
            Next
        Next

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Messages postés
8
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
21 novembre 2008
1
L'idée proposée par Casy est bonne, mais si à chaque fois qu'il y a un nouveau niveau à ajouter tu auras besoin de modifier ton code;

Si tu veux limiter (expressement) la parcours de 3 niveaux, va pour ton algorithme. mais si le nombre de niveau est indeterminé, alors tu as besoin de faire une fonction recursive qui va parcourir tous les noeuds.
C'est un algo complexe, mais quand il marche, et bien l'utilise dans presque TOUS les cas de figures liés au parcours d'un Treeview
Messages postés
59
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
9 août 2007
1
Merci beaucoup Casy j'ai dû rajouter un niveau de plus car je voulais atteindre le 3ème niveau de mon treeview mais ça marche à merveille.
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
30 janvier 2013

Bonjour tout le monde
Justement j'ai ce cas de figure à étudier en ce moment,
j'essaie de lister le contenu d'un dossier ftp distant dans un treeview,
j'ai une fonction recursive qui me liste les noeuds lorsqu'un "/" est detecté et qui en fonction de cela m'ajoute un noeud "enfant".
Le soucis est que les noeuds enfants ne sont pas attribués aux bons parents, je retrouve même parfois plusieurs fois le même enfants dans des parents différents
le vrai bordel quoi ^^
si une âme charitable veut bien me donner un exemple de code, ça m'aiderait beaucoup
merci
ps : je suis en info de gestion fin de 1ere année excusez ma nullité
Messages postés
8
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
21 novembre 2008
1
salut Halbi.
Je voudrais voir le bout de code à partir duquel tu construis ton treeview.

T'es en première année info de gestion et tu penses à faire des choses que moi j'ai appris à faire en 3e Info; alors ne crois pas que t'es nul. C'est pas parceque quelque chose ne va pas comme tu veux que tu vas te décourager.
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
30 janvier 2013

Déja, merci de bien vouloir m'aider, c'est simpa et merci aussi pour les encouragements
je suis en alternance en faite, je bosse ce projet en entreprise et cette semaine je suis en cours, donc je te poste le code la semaine prochaine si tu veux bien.
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
30 janvier 2013

Voila comme promis Stankov, je viens poster le bout de mon code concernant les treenodes :





 


Il doit paraitre bordelique pour vous, mais je suis encors debutant, veuillez m'excuser





Function
Lister_Noeud(ByVal NomRep As String, ByRef Noeud As
Windows.Forms.TreeNode, ByVal Wi As Int32) As
Boolean                                                        

'Voila la fonction recursive (ou routine)


        Dim listbox As New Windows.Forms.ListBox

        ftpcd(NomRep, axinet1)                                     

'ces fonctions viennent d'une autre feuille et me servent


        ftpdir(listbox, axinet1)                                         

'a lister le contenu du ftp


        Dim wrep As String
        Dim wnoeud As New Windows.Forms.TreeNode

        Wi = 0
        For Wi = 0 To listbox.Items.Count - 1                           '

pour wi de 0 au nombre d'elements de la listbox


            wrep = listbox.GetItemText(listbox.Items(Wi))              

'wrep = elements de la listbox


            wnoeud.ImageIndex = 0
            wnoeud.SelectedImageIndex = 0
            wnoeud.Text = wrep                                         

'texte du noeud = contenu de wrep


          
            If InStr(wrep, "/") > 0 Then                               

'si wrep comporte au moins un "/"


                Lister_Noeud(wrep, wnoeud, Wi)                        
            Else
                ftpcd("..", axinet1)                                    

'sinon, on remonte d'un niveau


            End If
            Noeud.Nodes.Add(wnoeud)
        Next
    End Function

'-----------------------------------------------------------------------------------------------------------------------------------------------------'

   
Private Sub Menu_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles
MyBase.Load                                                                                      

        Dim i As New Integer
        Dim Nom_Rep As String
        Dim lstb As New System.Windows.Forms.ListBox                  







        If ftpopen("





192.168.1.1



", "user", "pass", axinet1) = True Then 'ouverture connection ftp
            ftpdir(lstb, axinet1)                                                                                    'dir dans la lstb
            axinet1.Cancel()
            i = 0
            For i = 0 To lstb.Items.Count - 1                         
                ftpopen("192.168.1.1", "user", "pass", axinet1)    'connection ftp
                Nom_Rep = lstb.GetItemText(lstb.Items(i))              
                Dim noeud As New Windows.Forms.TreeNode
                noeud.ImageIndex = 0
                noeud.SelectedImageIndex = 0
                noeud.Text = Nom_Rep                                  
                If InStr(Nom_Rep, "/") > 0 Then                         'si dans nom_rep il y a un "/" alors
                    Lister_Noeud(Nom_Rep, noeud, i)                    
                End If
                TreeV_MAJ.Nodes.Add(noeud)                              'ajout du noeud
                axinet1.Cancel()
            Next
        Else
            MsgBox("non connecté au ftp")                              
        End If
    End Sub

Ce bout de code me génere un peu tout et n'importe quoi, je retrouve des noeuds enfants identiques dans tous mes noeuds parents, alors que d'autres n'apparaissent pas, j'espere avoir été clair
Mon maître de formation m'a aider à le developper mais je galere pas mal dans l'ensemble, j'ai encore un peu de mal à tout comprendre, voila si quelqu'un à autre chose à me proposer, le but étant de trouver tous les noeuds du treeview en ne connaissant pas le nombre de niveaux à l'avance avec les bons noeuds enfants appartenant aux bons noeuds parents
(Wouah quelle prise de tête ce truc )
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
30 janvier 2013

arf je croyais que c'etait un site de developpeur ici :( lol
allez les gens, j'ai besoin de votre aide
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
30 janvier 2013

c'est si compliqué que ça que personne arrive à me repondre ?
je suis en premiere année de bts info, je ne pense pas avoir le niveau suffisant pour pouvoir poser des colles à de grands developpeur comme vous, nan ?
bon si une âme charitable remarque ce message, merci de m'aider
Messages postés
8
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
21 novembre 2008
1
D2solé pour mon long silence, j'avais pas la possibilité de me mettre devant un ordinateur, congé maladie oblige.
Je viens de copier le code, je vais l'étudier ce soir si Dieu le permet.
je te donnerais mon feedBack Lundi.
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
30 janvier 2013

Merci c'est simpa de ta part,

j'espere ke c'est rien de grave pour ta maladie !
j'attends de tes nouvelles avec impatiente
bon week end à toi et puis repose toi
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
30 janvier 2013

UP
Messages postés
2
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
23 juillet 2008

.:: haad ::.
Messages postés
2
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
23 juillet 2008

Private






Function
ParseTreeview(

ByVal
tv

As
TreeView)

As
SortedList


'sortedList qui stocke les r‚sultats du parcours






Dim
sl

As
SortedList =

New
SortedListsl.Clear()


For
i

As



Integer
= 0

To
TreeView2.Nodes.Count - 1


'on lance la fonction ParseNodeLevel sur chaque noeud racine du treeview

ParseNodeLevel(TreeView2.Nodes(i), sl)







Next






Return
sl


End



Function 








Private



Sub
ParseNodeLevel(

ByVal
node

As
TreeNode,

ByVal
sl

As
SortedList)


'ajout du noeud courant






If



Not
(sl.Contains(node.ImageToolTip))

Then

sl.Add(node.ImageToolTip, Path.GetFileName(node.Value))







End



If






'pour chaque noeud enfant du noeud courant






For
i

As



Integer
= 0

To
node.ChildNodes.Count - 1


'ajout … la liste






If



Not
(sl.Contains(node.ChildNodes(i).ImageToolTip))

Then

sl.Add(node.ChildNodes(i).ImageToolTip, Path.GetFileName(node.ChildNodes(i).ImageToolTip))







End



If






'appel de cette fonction pour chaque noeud enfant






'c'est ici qu'… lieu la r‚cursivit‚

ParseNodeLevel(node.ChildNodes(i), sl)







Next






End



Sub



.:: haad ::.
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
30 janvier 2013

Je m'en vais tester ça, merci en tout cas, ça me donne déja une idée de ce que j'avais oublier (ex : SortedList, jamais entendu parler)