Laden...

Treenode ausblenden

Erstellt von Phaiax vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.785 Views
P
Phaiax Themenstarter:in
56 Beiträge seit 2006
vor 16 Jahren
Treenode ausblenden

Ist es richtig, dass es keine Möglichkeit gibt, einzelne Treenodes in einem Treeview auszublenden?

Ich will eine Filterfunktion realisieren. Ähnlich dem Startmenü in Vista oder den Lesezeichen im Firefox oder der Winamp-Lieder-Liste.

Um trotzdem Knoten ausblenden zu können könnte ich ja eine Kopie des vollständigen Rootnodes erstellen und dann im "Orginal" die einzelnen Nodes löschen. Gibts wirklich keine bessere Lösung?

W
558 Beiträge seit 2006
vor 16 Jahren

Hallo Phaiax,

Original von Phaiax
Ist es richtig, dass es keine Möglichkeit gibt, einzelne Treenodes in einem Treeview auszublenden?

Stimmt.
Die Property Visible gibt es jedenfalls nicht.

mfg
webstarg

D
462 Beiträge seit 2005
vor 16 Jahren

Hallo!

Du kannst dir die ausgeblendeten Nodes in einem Dictionary<TreeNode, List<TreeNode>> (Key = Parent-Node; List = Liste der ausgelendeten Subnode des Parents) merken und per remove aus dem TreeView entfernen. Wenn du die Nodes wieder hinzufügen willst, kannst du einfach mit dem Parent die ausgelendeten Subnodes im Dictionary wiederfinden, per parent.Add() wieder zum TreeView hinzufügen und aus der List<> entfernen (oder gleich den ganzen Dictionary-Eintrag, wenn du alle Subnodes einblenden willst).

mfg

W
558 Beiträge seit 2006
vor 16 Jahren

@ DeveloperX: Die Reihenfolge ist dann aber futsch, oder?

webstarg

D
462 Beiträge seit 2005
vor 16 Jahren

Das weiß ich leider auch nicht. Aber wenn du Glück hast, ändert sich bei Remove() der Index eines TreeNodes nicht. Dann kannst du den Node per Insert() an die richtige Position einfügen. Müsstest du halt mal testen.

Ansonsten kannst du dir ja den Index irgendwo merken, und dann ein den richtigen Index in der TreeNodeCollection suchen und dort einfügen.

P
Phaiax Themenstarter:in
56 Beiträge seit 2006
vor 16 Jahren

Ich hätte nicht gedacht, dass eine kleine Filterfunktion so schwer werden könnte. Ich Hatte erst versucht, immer von einer Kopie des Orginalknotens die nicht benötigten Knoten zu löschen, aber dass ging nicht, da bei jedem löschen die Enumeration (foreach) verschoben wurde.

Jetzt hab ich eine for-Schleife gebaut, die das umgehen kann: Hier der Code, vielleicht kann er jemandem einen Denkanstoß bringen:


            // erst Kind-Knoten durchgehen
            for (int i = 0; i < Node.Nodes.Count; i++)
            {
                TreeNode ChildNode = Node.Nodes[i];
                FilterNode(ChildNode);
                if (ChildNode.Parent == null) // Gelöscht, d.h. Index verschiebt sich um eins nach oben
                    i--;
            }

1.985 Beiträge seit 2004
vor 16 Jahren

Hallo Phaiax,

soweit ich weiß, gibt es keine einfache Lösung. Ich würde mir entweder die gelöschten Nodes und den entsprechenden Index irgendwo merken, und dann ggf. wieder einblenden, oder auf einer Kopie arbeiten und dort die Nodes einfach entfernen.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de