Treeview1 Childnodes richtig löschen

  • .NET (FX) 4.5–4.8
  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Treeview1 Childnodes richtig löschen

    Huhu liebe Gemeinde,


    ich nutze in Vb.net Treeviews zur Visualisierung von Texten.

    Ich möchte die einzelnen Childnodes mittels eines Rechtsklicks löschen wollen. (Später durch ein Contextmenü)
    Allerdings bekomme ich Exceptionfehler, sobald ich versuche, die Childnode eines Parentnodes zu löschen. Die unteren Childnodes können problemlos gelöscht werden.

    Ich hatte zudem das Problem, dass bei einem einfachen Rechtsklick eines Childnodes die Zuordnung des "SelectedNodes" nicht immer funktionierte.
    Ich musste vorher auf die Parentnode klicken und dann war das Löschen problemlos machbar.

    Mein letzter Ansatz ist folgender:

    VB.NET-Quellcode

    1. Private Sub TreeView1_MouseDown(sender As Object, e As MouseEventArgs) Handles TreeView1.MouseDown
    2. Dim info As TreeViewHitTestInfo
    3. info = TreeView1.HitTest(e.Location)
    4. Dim selectednode As TreeNode = info.Node
    5. If e.Button = MouseButtons.Right Then
    6. For Each tn As TreeNode In TreeView1.Nodes
    7. For Each tn2 As TreeNode In tn.Nodes
    8. If tn2.Text = selectednode.Text Then
    9. tn2.Remove()
    10. TreeView1.Refresh()
    11. End If
    12. Next
    13. Next
    14. End If
    15. End Sub


    Aus dem "Tipps und Tricks"-Unterforum verschoben. ~Trade

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    Semiconductor schrieb:

    Ich musste vorher auf die Parentnode klicken
    Das ist verständlich, denn Du musst nach dem Löschen eines Nodes die SelectedItems refreshen.
    Das ist dasselbe Problem, wenn Du bei einer List(Of T) das 1. und 2. Item löschen willst, da musst Du .Item(0) und dann noch mal .Item(0) löschen, denn mit dem 1. Löschen wird aus dem 2. Item das 1.
    Anders, wenn Du von hinten löschst, da funktioniert das so wie gedacht:
    Lösche .Item(1) und danach .Item(0) und es stimmt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    probierma so:

    VB.NET-Quellcode

    1. Private Sub TreeView1_MouseDown(sender As Object, e As MouseEventArgs) Handles TreeView1.MouseDown
    2. If e.Button <> MouseButtons.Right Then Return
    3. Dim info As TreeViewHitTestInfo = TreeView1.HitTest(e.Location)
    4. Dim selectednode As TreeNode = info.Node
    5. If selectednode Is Nothing Then Return
    6. selectednode.Parent.Nodes.Remove(selectednode)
    7. End Sub
    Was deine Schleife soll ist mir unklar.
    Beachte: Meine Funktion funzt nur bei eingeschachtelten Nodes, für TopLevel-Nodes muss sie erweitert werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Semiconductor schrieb:

    Exceptionfehler
    Welche Exception mit welchem Code?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi einfach so:

    VB.NET-Quellcode

    1. Private Sub treeView1_MouseDown(sender As Object, e As MouseEventArgs)
    2. If e.Button = MouseButtons.Right Then
    3. Dim info As TreeViewHitTestInfo = treeView1.HitTest(e.Location)
    4. If info.Node IsNot Nothing Then
    5. info.Node.Remove()
    6. End If
    7. End If
    8. End Sub


    Geht für alle Nodes.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!