Laden...

TreeView, wenn alle Knoten expandiert sind Aktion auslösen?

Erstellt von St0rmy vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.214 Views
S
St0rmy Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren
TreeView, wenn alle Knoten expandiert sind Aktion auslösen?

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! :]

C
258 Beiträge seit 2011
vor 11 Jahren

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;
        }
S
St0rmy Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren

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! :]

4.221 Beiträge seit 2005
vor 11 Jahren
        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;  
        }  
Hinweis von herbivore vor 11 Jahren

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...

2.187 Beiträge seit 2005
vor 11 Jahren

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

4.221 Beiträge seit 2005
vor 11 Jahren

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...