Der Original-Titel war: "Erkenne, ob Node im FullPath bereits vorhanden ist"
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
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.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
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
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.
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!