Da Ihre Frage zu einer bestimmten WinForm Komponente spezifisch ist, aber die Lösung, ich werde Sie schreiben, ist allgemeiner. Deshalb werde ich Ihnen meine Lösung erklären, wenn Sie einen allgemeinen Baum betrachten, aber der Code, den ich Ihnen zur Verfügung stelle, löst Ihr eigenes Problem.
Was Sie tun möchten, ist im Grunde eine tree traversal, die der Prozess der Durchquerung aller Kinder eines Baumes ist, da seine Wurzel ist. Grundsätzlich müssen wir überprüfen, ob alle die Nachkommen (nicht die Kinder) eines Knotens sind. Der Unterschied zwischen Kindern und Nachkommen besteht darin, dass Kinder denselben Elternteil haben (zum Beispiel sind ABC Kinder von X, wenn AB und C direkt mit X verbunden sind), während Nachkommen "Kinder von Kindern von Kindern ... von Kindern" sein können (Beispiel: A ist ein Nachkomme von X, wenn von X ausgehend, ein Pfad auf dem Baum, die von dem Knoten X ausgehend, geht unten zum Knoten A)
um zu besuchen. Für alle Nachkommen eines Baumes benötigen wir eine rekursive Funktion, in unserem Fall gibt die Funktion einen booleschen Wert zurück, der uns sagt, ob alle Nachkommen eines bestimmten Startknotens expandiert sind Es gibt einen Beispielcode, der genau das tut, wonach Sie gefragt haben :
bool areAllNodesExpanded(TreeNode nodeToCheck){
if(!nodeToCheck.IsExpanded)
return false;
foreach(TreeNode n in nodeToCheck.Nodes){
if (n.Nodes.Count == 0)
continue;
if(!areAllNodesExpanded(n))
return false;
}
return true;
}
Hoffe das hilft.
LuxGiammi
EDIT: der Code-Snippet oben nicht wegen zwei Fehler kompiliert wird, kann ich gemacht: 1. es ist IsExpanded und nicht 2. Aus irgendwelchen Gründen IsExpanded ich will nicht weiter untersuchen, var n
ist vom Typ Objekt, während es vom Typ TreeNode
sein sollte. Fehler korrigiert
Nur ein Tipp, wenn Sie mit C# arbeiten, verwenden Sie Pascal Fall für Methoden. Zum Beispiel: 'IsAllNodesExpanded' – BendEg