Hallo ,
ich hab einen TreeView und möchte, dass wenn alle Knoten expandiert sind, dass sich der Text eines Buttons ändert.
Aber mit dem AfterExpand bekomm ich das nicht hin. Wie fragt man ab ob alle Nodes expandiert sind.
(Es ist keine gefixte Knotenanzahl, denn ein Streamreader liest aus einer Textdatei eine
bestimmte Zeichenfolgen aus und trägt diese als Knoten ein)
Danke schonmal im Vorraus
:] Wenn es keinen Fehler gibt, dann hast du etwas falsch gemacht! :]
Ich weiß nicht ob TreeView Selbst eine Möglichkeit dafür zur verfügung stellt.
Du kannst aber rekursiv einfach alle Knoten durchgehen und überprüfen ob diese Expanded sind.
private bool ChildNodesExpanded(TreeNodeCollection nodes)
{
bool result = true;
foreach (TreeNode node in nodes)
{
if (node.Nodes.Count != 0)
{
result = result && ChildNodesExpanded(node.Nodes);
result = result && node.IsExpanded;
}
}
return result;
}
Ok an ein recursive hatte ich jetzt nicht gedacht...
danke für den Tip, werde es gleich mal ausprobieren.
:] Wenn es keinen Fehler gibt, dann hast du etwas falsch gemacht! :]
private bool ChildNodesExpanded(TreeNodeCollection nodes) { bool result = true; foreach (TreeNode node in nodes) { if (node.Nodes.Count != 0) { result = result && ChildNodesExpanded(node.Nodes); result = result && node.IsExpanded; } //Hier noch abbrechen wenn schon ein Node nicht expanded ist if (!result) { break; } } return result; }
Falls es jemand nicht sofort sieht: Programmierhans hat den Code von Console32 zitiert und dort am Ende der Schleife von eine Verbesserung eingefügt, siehe Kommentar im Code. Die Verbesserung ist gut, trotzdem geht es noch besser, siehe den folgenden Vorschlag von JuyJuka.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Hallo Programmierhans,
ich denke man kann das noch ein bischen Optimieren, ohne die Lesbarkeit zu verringern:
private bool AreAllChildNodesExpanded(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
if (node.Nodes.Count > decimal.Zero)
{
if (!node.IsExpanded || !AreAllChildNodesExpanded(node.Nodes))
return false;
}
}
return true;
}
Gruß
Juy Juka
Hallo JuyJuka
Optimieren kann man immer... man kann dabei aber auch leicht etwas übersehen.... deswegen von mir nur eine kleine Anpassung (gewissermassen als Anstoss den Code nicht einfach so stehen zu lassen und munter den Rest des Baumes zu prüfen obwohl schon der erste Node collapsed ist)
Gruss
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...