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%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.
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.
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:
Ich verwende dann diese Methode, um alle Knoten des Baumes zu erhalten:
%Vor%Sie können die Warteschlange wie in meiner Anwendung verwenden:
%Vor%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%