[VB2005 ]Parcourir tous les noeuds d'un treeview

Résolu
cs_EXCLUSIF Messages postés 59 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 9 août 2007 - 28 juil. 2007 à 14:19
cs_halbi Messages postés 17 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 30 janvier 2013 - 11 août 2008 à 09:38
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

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 juil. 2007 à 20:50
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 #   
3
stankov Messages postés 8 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 21 novembre 2008 1
22 avril 2008 à 14:49
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
1
cs_EXCLUSIF Messages postés 59 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 9 août 2007 1
28 juil. 2007 à 22:36
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.
0
cs_halbi Messages postés 17 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 30 janvier 2013
19 mai 2008 à 14:50
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é
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
stankov Messages postés 8 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 21 novembre 2008 1
27 mai 2008 à 11:59
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.
0
cs_halbi Messages postés 17 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 30 janvier 2013
28 mai 2008 à 19:23
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.
0
cs_halbi Messages postés 17 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 30 janvier 2013
2 juin 2008 à 14:15
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 )
0
cs_halbi Messages postés 17 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 30 janvier 2013
6 juin 2008 à 10:18
arf je croyais que c'etait un site de developpeur ici :( lol
allez les gens, j'ai besoin de votre aide
0
cs_halbi Messages postés 17 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 30 janvier 2013
16 juin 2008 à 11:01
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
0
stankov Messages postés 8 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 21 novembre 2008 1
20 juin 2008 à 14:20
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.
0
cs_halbi Messages postés 17 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 30 janvier 2013
20 juin 2008 à 14:43
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
0
cs_halbi Messages postés 17 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 30 janvier 2013
10 juil. 2008 à 09:08
UP
0
cs_haad Messages postés 2 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 23 juillet 2008
23 juil. 2008 à 15:02
.:: haad ::.
0
cs_haad Messages postés 2 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 23 juillet 2008
23 juil. 2008 à 15:04
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 ::.
0
cs_halbi Messages postés 17 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 30 janvier 2013
11 août 2008 à 09:38
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) 
 
0
Rejoignez-nous