8
votes

Accéder à tous les nœuds dans le contrôle des arbres

J'ai un Treeview Contrôle avec jeu de nœuds et de nœuds d'enfants. Par exemple:

la racine a un, b, c.

A a A1, A2, A3, puis que A1, A2 contient également des nœuds tels que X1, X2, X3 et ainsi de suite. Comme si ces nombreuses sous-notes sont là. Je sais qu'il est possible d'utiliser des boucles avec une boucle pour une boucle.

Je veux juste accéder à tous les nœuds dans TreeView Contrôle en utilisant une ou deux pour boucles. < P> Y a-t-il un algorithme pour cela ou existe-t-il d'une autre manière?

Une autre question: est-il possible d'avoir le chemin d'un nœud d'arbre dans un objet ou dans une chaîne en utilisant des fonctions de bibliothèque? Par exemple: xxx


0 commentaires

7 Réponses :


9
votes

N'utilisez pas de boucles imbriquées, mais optez pour une solution récursive comme: xxx

appelez cette fonction pour votre nœud racine.

pour votre question supplémentaire: chèque la propriété complet .


0 commentaires

7
votes

Vous pouvez utiliser une fonction récursive pour traverser l'arborescence entier: xxx

Vous pouvez ensuite appeler ceci à l'aide de: xxx

et il marchera d'abord la profondeur de l'arbre entier (c'est-à-dire aussi profondément que possible avant de passer au frère suivant). En passant dans la collection Collection signifie que ce code traitera des arbres qui ont plusieurs nœuds racines.

Le code exemple ci-dessus imprimera le nom du nœud ainsi que le < fort> chemin complet de ce nœud dans l'arbre.


0 commentaires

5
votes

Je ne suis pas le plus grand fan de récursivité, mais il semble que vous devez l'utiliser. J'ai vu un exemple intelligent de la récursion de mélange en ligne avec un itérateur. xxx


0 commentaires

1
votes

Vous pouvez utiliser la file d'attente comme ce que j'avais fait dans mon application: xxx


0 commentaires

2
votes

Je sais que ce fil est assez vieux et ma méthode ne réduit pas exactement la quantité de récursion et il peut être légèrement plus lent, mais cela rend mon code un peu plus propre.

J'utilise un PROCÉDÉ D'EXTENSION POUR IEnumarable <> Pour aplatir n'importe quel arbre (pas seulement les nœuds de TreeView): xxx

i puis utilisez cette méthode pour obtenir tous les nœuds de L'arbre: xxx


1 commentaires

Cela a l'air très bien rangé ... peut-il être converti en vb.net? VB peut-il utiliser l'opérateur =>?



3
votes

Vous pouvez créer un Méthode d'extension qui renvoie une liste .

Désactivants Procédé d'extension < Pré> xxx

pour obtenir tous les nœuds d'une arboresview xxx

pour obtenir tous les nœuds enfants d'un nœud xxx

Vous pouvez également utiliser LINQ pour rechercher entre les nœuds.

Procédé d'extension des ancêtres

Pour obtenir des ancêtres d'un nœud, vous pouvez aussi me intéresser Méthodes d'extension des ancêtres .


0 commentaires

0
votes

Le code suivant est utilisé pour traverser les nœuds d'une arbreView et ne renvoyant que les nœuds de feuilles: xxx

Je l'utilise pour accéder aux noms de fichiers dans un arborescence d'un explorateur: < Pré> xxx


0 commentaires