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

Messages postés
59
Date d'inscription
mercredi 5 février 2003
Dernière intervention
9 août 2007
- - Dernière réponse : cs_halbi
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
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
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
3
Merci
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 #   

Merci cs_casy 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de cs_casy
Messages postés
8
Date d'inscription
lundi 6 décembre 2004
Dernière intervention
21 novembre 2008
1
Merci
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
Commenter la réponse de stankov
Messages postés
59
Date d'inscription
mercredi 5 février 2003
Dernière intervention
9 août 2007
0
Merci
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.
Commenter la réponse de cs_EXCLUSIF
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Dernière intervention
30 janvier 2013
0
Merci
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é
Commenter la réponse de cs_halbi
Messages postés
8
Date d'inscription
lundi 6 décembre 2004
Dernière intervention
21 novembre 2008
0
Merci
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.
Commenter la réponse de stankov
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Dernière intervention
30 janvier 2013
0
Merci
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.
Commenter la réponse de cs_halbi
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Dernière intervention
30 janvier 2013
0
Merci
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 )
Commenter la réponse de cs_halbi
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Dernière intervention
30 janvier 2013
0
Merci
arf je croyais que c'etait un site de developpeur ici :( lol
allez les gens, j'ai besoin de votre aide
Commenter la réponse de cs_halbi
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Dernière intervention
30 janvier 2013
0
Merci
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
Commenter la réponse de cs_halbi
Messages postés
8
Date d'inscription
lundi 6 décembre 2004
Dernière intervention
21 novembre 2008
0
Merci
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.
Commenter la réponse de stankov
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Dernière intervention
30 janvier 2013
0
Merci
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
Commenter la réponse de cs_halbi
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Dernière intervention
30 janvier 2013
0
Merci
UP
Commenter la réponse de cs_halbi
Messages postés
2
Date d'inscription
mardi 24 décembre 2002
Dernière intervention
23 juillet 2008
0
Merci
.:: haad ::.
Commenter la réponse de cs_haad
Messages postés
2
Date d'inscription
mardi 24 décembre 2002
Dernière intervention
23 juillet 2008
0
Merci
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 ::.
Commenter la réponse de cs_haad
Messages postés
17
Date d'inscription
mardi 9 octobre 2007
Dernière intervention
30 janvier 2013
0
Merci
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) 
 
Commenter la réponse de cs_halbi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.