Passer en revu TOUS les nodes d'un tree

Résolu
cs_Papin38
Messages postés
15
Date d'inscription
jeudi 10 août 2006
Statut
Membre
Dernière intervention
13 octobre 2010
- 14 mars 2007 à 12:05
cs_Papin38
Messages postés
15
Date d'inscription
jeudi 10 août 2006
Statut
Membre
Dernière intervention
13 octobre 2010
- 14 mars 2007 à 15:55
Bonjour à tous,

Je débute en .NET et je cale sur un petit problème de tree

En VB6 quand on faisait :
For Each Nod In Tree.Nodes
   ...
Next
On passait en revue la totalité des nodes du tree, quelque soit la profondeur de l'arborescence.
Sur .NET on obtient que les enfants proches.

J'ai essayé avec les 'énumérateur' mais le résultat est le même !

Je suis persuadé qu'il doit exister une solution simple.

Un grand merci à celui ou celle qui me renseignera.

2 réponses

mrdep1978
Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
7 juin 2009
6
14 mars 2007 à 15:12
Salut,

Je n'ai pas trouvé de solution "simple".
Pour avoir tous les noeuds, il faut faire un traitement récursif, de façon à ramener pour chaque noeud, la totalité de ses noeuds fils

Ci dessous :
- une procédure permettant de ramener tous les noeuds fils d'un noeud,
- une fonction appelant la procédure précédente et renvoyant ainsi la totalité des noeuds passés en paramètre
- un exemple d'utilisation.





Private

Sub lsub_GetNodes(ByVal a_Node As TreeNode, ByVal a_Collection As Collection)

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>







'Recherche les noeuds fils du noeud passé en paramètre et les ajoute à la collection a_Collection








Dim
l_Node As TreeNode









 






'Parcourt les noeuds fils








For

Each l_Node In a_Node.Nodes








'Ajoute le noeud à la collection








a_Collection.Add(l_Node)








'Recherche les noeuds inférieurs








lsub_GetNodes(l_Node, a_Collection)








Next








End

Sub







 






Private

Function lfct_GetTreeViewNodes(ByVal a_Treeview As TreeView) As Collection








'Renvoie, sous forme d'une collection, la liste des noeuds du treeview








Dim
l_Node As TreeNode








Dim
l_Coll AsNew Collection








'Parcourt les noeuds "Pères" du treeview








For

Each l_Node In a_Treeview.Nodes








'Ajoute ces noeuds à la collection








l_Coll.Add(l_Node)








'Recherche les noeuds fils de l_Node








lsub_GetNodes(l_Node, l_Coll)








Next
l_Node









 






'Renvoie la collection de noeuds








lfct_GetTreeViewNodes = l_Coll








End

Function









Utilisation : 






Private

Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click








Dim
l_Node As TreeNode








For

Each l_Node In lfct_GetTreeViewNodes(TreeView1)








ListBox1.Items.Add(l_Node.Text)








Next








End

Sub
3
cs_Papin38
Messages postés
15
Date d'inscription
jeudi 10 août 2006
Statut
Membre
Dernière intervention
13 octobre 2010

14 mars 2007 à 15:55
Merci à toi mrdep1978 pour ta réponse et ton code en exemple.

J'avais espéré pouvoir éviter la récursivité. Mais .NET ne peut pas avoir que des avantages... !
0