Remove TreeView Node
-
Hallo,
ICh habe verschiedene Nodes die etwa folgendermaßen aussehen.
10.0.0.2 TcpClient-Object
10.0.0.3 TcpClient-Object
10.0.0.5 TcpClient-ObjectWenn ich nun eine Meldung von einer IP bekomme, die im Node enthalten ist, also z.B. 10.0.0.2,dann würde ich diese gerne löschen.
TreeView.Node.Remove() verlangt jedoch einen node als Parameter.
Also muss ich dem TreeView node; erst einen Wert geben.=> Ich müsste alle Nodes nach der IP 10.0.0.2 durchsuchen, und diese dann Remove() übergeben?
Komme heir auf keinen grünen Zweig.
Thx für Hilfen!
-
Genau, entweder sucht du den Knoten und übergibst diesen, oder du weißt die Position und verwendest RemoveAt, oder du weißt den Knoten einen bestimmten (eindeutigen) Schlüssel zu und verwendest RemoveByKey.
-
Hallo,
Was mir nicht ganz klar ist, ist wie ich z.B. alle Knoten nach der IP "XYZ" durchsuche und das Ergebnis einem node zuweise.
Hat die Search Funktion nicht einen return Wert von node[] ?
Sorry falls ich jetzt was verwechsle, ein paar Details wären hilfreich
-
Du musst deinen Nodes erstmal einen eindeutigen Schlüssel zuweissen (z.B. die IP Adresse). Dann kannst du Operationen, über diesen Schlüssel, auf die Node Kollektion ausführen um zu löschen/suchen/...
Der Schlüssel ist übrigens die Property Name einer Node. Also benennst du die Nodes entsprechend ihrer IP und kannst dann einfach:
Suchen
TreeNode[] nodes = treeView.Nodes.Find( "10.0.0.1", false );
Entfernen
treeView.Nodes.RemoveByKey( "10.0.0.1" );
-
Irgendwas scheint einfach nicth zu klappen.
Neue Nodes füge ich folgendermaßen hinzu:
node = tview.Nodes.Add("xyz");
Sie werden auch wunderbar auf dem TreeView Element angezeigt.
Folgender Code:
foreach (TreeNode item in tview.Nodes) { MessageBox.Show(item.Name); }
Gibt mir eine Message Box ohne Ergebnis. (leeres Resultat)
Zu der Zeit war ein Client verbunden mit der IP "127.0.0.1".
Sollte also eig 127.0.0.1 in der Messagebox stehen ?Danke!
-
Habe den Fehler schon gefunden.
Ich muss bei:node = tview.Nodes.Add("xyz");
noch:
node.Name = "xyz";
hinzufügen, so dass ich dann in der Schleife:
foreach (TreeNode item in tview.Nodes) { if (item.Name == split[0]) item.Nodes.RemoveByKey(split[0]); }
machen kann.
Problem:
Es funktioniert nicht, das Item wird nicht gelöscht, bzw. wird noch in der Treeview angezeigt. HAbe natürlich eintview.Refresh(); tview.Update();
drinnen.
Und er kommt auch in die IF Bedingung rein. Habs vorhin mit ner MessageBox getestet!
-
Also entweder nur
tview.Nodes.RemoveByKey(split[0]);
oder aber
foreach (TreeNode item in tview.Nodes) { if (item.Name == split[0]) item.Remove(); }
Dein Fehler war, daß du aus den Unterknoten vom aktuellen 'item' versuchst hast, dieses Item zu löschen (was natürlich nicht geht -).