Zugriff auf alle Knoten in TreeView Control

8

Ich habe ein TreeView Control mit einem Satz von Knoten und Kindknoten. Zum Beispiel:

  

ROOT hat A, B, C.

A hat a1, a2, a3 und dann, dass a1, a2 auch einige Knoten wie x1, x2, x3 und so weiter enthält. So sind viele Unterknoten vorhanden. Ich weiß, dass es möglich ist, Schleifen mit einer for-Schleife zu verwenden.

Ich möchte nur auf alle Knoten in TreeView control mit einer oder zwei for-Schleifen zugreifen.

Gibt es einen Algorithmus dafür oder gibt es einen anderen Weg?

Eine weitere Frage: Ist es möglich, den Pfad eines Baumknotens in einem Objekt oder in einem String zu haben, indem Sie irgendwelche Bibliotheksfunktionen benutzen? Zum Beispiel:

%Vor%     
user162558 03.09.2009, 09:19
quelle

7 Antworten

9

Verwenden Sie keine verschachtelten Schleifen, sondern eine rekursive Lösung wie:

%Vor%

Rufen Sie diese Funktion für Ihren Wurzelknoten auf.

Für Ihre zusätzliche Frage: Überprüfen Sie die Eigenschaft FullPath .

    
tanascius 03.09.2009 09:27
quelle
5

Sie können eine rekursive Funktion verwenden, um den gesamten Baum zu durchlaufen:

%Vor%

Sie können dies dann aufrufen mit:

%Vor%

und es wird zuerst die gesamte Baumtiefe durchlaufen (dh so tief wie möglich hinuntergehen, bevor es zum nächsten Geschwister geht). Wenn Sie die Nodes -Auflistung übergeben, bedeutet dies, dass dieser Code Bäume behandelt, die mehrere Stammknoten haben.

Der obige Beispielcode gibt den Namen des Knotens sowie den vollständigen Pfad dieses Knotens innerhalb der Baumstruktur aus.

    
adrianbanks 03.09.2009 09:37
quelle
5

Ich bin nicht der größte Fan von Rekursion, aber es scheint, dass Sie es benutzen müssen. Ich sah ein cleveres Beispiel im Online-Mischen von Rekursion mit einem Iterator.

%Vor%     
noclayto 16.09.2009 15:58
quelle
3

Sie können eine Erweiterungsmethode erstellen, die List<TreeNode> zurückgibt.

Descendants-Erweiterungsmethode

%Vor%

Um alle Knoten einer TreeView zu erhalten

%Vor%

Um alle untergeordneten Knoten eines Knotens zu erhalten

%Vor%

Sie können linq auch verwenden, um zwischen Knoten zu suchen.

    
Reza Aghaei 02.09.2015 18:51
quelle
2

Ich weiß, dass dieser Thread ziemlich alt ist und meine Methode die Rekursion nicht genau reduziert. und mag etwas langsamer sein, aber es macht meinen Code etwas sauberer.

Ich verwende eine Erweiterungsmethode für IEnumarable<> , um einen beliebigen Baum (nicht nur TreeView-Knoten) zu reduzieren:

%Vor%

Ich verwende dann diese Methode, um alle Knoten des Baumes zu erhalten:

%Vor%     
stritch000 05.03.2013 22:44
quelle
1

Sie können die Warteschlange wie in meiner Anwendung verwenden:

%Vor%     
M_Mogharrabi 12.11.2012 07:29
quelle
0

Der folgende Code wird verwendet, um die TreeView-Knoten zu durchlaufen und nur die Blattknoten zurückzugeben:

%Vor%

Ich benutze es für den Zugriff auf die Dateinamen in einem Explorer-ähnlichen TreeView:

%Vor%     
user3902302 23.06.2016 13:56
quelle

Tags und Links