Laden...

Erkennen, ob TreeNode zwei Knoten mit gleicher Bezeichnung enthält bzw. enthalten würde

Erstellt von bernd_1980 vor 10 Jahren Letzter Beitrag vor 10 Jahren 958 Views
Thema geschlossen
Hinweis von herbivore vor 10 Jahren

Der Original-Titel war: "Erkenne, ob Node im FullPath bereits vorhanden ist"

B
bernd_1980 Themenstarter:in
19 Beiträge seit 2014
vor 10 Jahren
Erkennen, ob TreeNode zwei Knoten mit gleicher Bezeichnung enthält bzw. enthalten würde

Hallo Forum,
ich habe folgendes Problem bei welchem ich nicht weiterkomme.

Ich habe einen TreeView, welcher die verschiedenesten Nodes beinhaltet, jedoch darf ein Node niemals doppelt vorkommen auf einer Ebene:
Folgendes ist zB erlaubt

ALL
---- a
-------- b
------------ c
---- b
-------- c

Aber folgendes soll schon mal nicht erlaubt sein:

ALL
---- a
-------- b
------------ c
-------- b
-------- c

Also der Node b darf nicht 2mal unter dem Node a vorkommen.

Leider bekomme ich es einfach nicht hin!

So sieht mein Code aus:


Boolean DoesExist = TreeNodeExists(comboBoxShockNode.Text);
if (!DoesExist)
          treeView.SelectedNode.Nodes.Add(comboBoxShockNode.Text);

       private Boolean PrintRecursive(TreeNode treeNode, String name)
        {
            foreach (TreeNode tn in treeNode.Nodes)
            {
                if (tn.FullPath.Contains(name))
                {
                    MessageBox.Show(tn.FullPath.ToString());
                    return true;
                }
            }
            return false;
        }
        private Boolean CallRecursive(TreeView treeView, String name)
        {
            TreeNodeCollection nodes = treeView.Nodes;
            Boolean doesExist = false;
            foreach (TreeNode n in nodes)
            {
                doesExist = PrintRecursive(n, name);
                return doesExist;
            }
            return doesExist;
        }
        private void RemoveButton_Click(object sender, EventArgs e)
        {
            treeView.SelectedNode.Remove();
        }

Und sobald die foreach Schleife ein 2tes Mal durchlaufen wird, kommt er zum allgemeinen return false in der Methode PrintRecursive und dadurch ergeben sich dann doppelte Einträge auf dem gleichen Level!

Leider weiss ich aber nicht, wie ich es umbauen muss, habe bei TreeView, TreeNodes, etc noch zu wenig Ahnung.
Vll. kann mir jemand dazu helfen!

Danke schon vielmals im vorhinein!

lG

C
2.121 Beiträge seit 2010
vor 10 Jahren

Dein Name könnte auch ein Teilstring sein. Das mit dem FullPath ist nicht gut.
Pack die Namen der Nodes auf einer Ebene in ein Dictionary. Da kannst du suchen ob der Name schon drin ist.

4.221 Beiträge seit 2005
vor 10 Jahren

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo bernd_1980,

nach deinen Beispielen willst du nicht das, was du in deinem Original-Titel beschrieben hast, sondern das, was ich als neuen Titel gesetzt habe. Und das ist wirklich leicht zu prüfen. Du musst halt nur gucken, ob in der Nodes-Collection, zu der du den aktuellen neuen Knoten hinzufügen willst, bereits ein Knoten mit dessen Bezeichnung vorhanden ist.

herbivore

B
bernd_1980 Themenstarter:in
19 Beiträge seit 2014
vor 10 Jahren

Hallo herbivore,
danke Dir vielmals für Deine Hilfe!

So etwas habe ich mir schon gedacht, nur scheitert es bei mir an der Verwendung der TreeView Methoden bzw. weiss ich nicht so recht, welche ich alle benötige und hänge nun schon seit Stunden daran fest.

Hinweis von herbivore vor 10 Jahren

Damit sind wir dann allerdings bei der Grenze von [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1 angekommen. "gemeinsam mehr erreichen" bedeutet eben auch, dass du deinen Beitrag - hier also die Umsetzung im konkreten Code - leisten musst. Dass dies bei Ungeübten länger dauern kann, ist klar, aber gerade wenn du es durchziehst, bekommst du die Übung, die dir momentan nicht fehlt. Irgendwann muss man einfach damit anfangen. Siehe auch [Hinweis] Bitte schau in die SDK-/MSDN-Doku und Anfänger und die MSDN-Doku - Ein Widerspruch?.

In diesem Sinne viel Erfolg!

Thema geschlossen