in Treeview Node verschieben und Position anzeigen

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von majachen99.

    in Treeview Node verschieben und Position anzeigen

    Hallo zusammen,

    mit folgendem Code verschiebe ich die Nodes:

    VB.NET-Quellcode

    1. Private Sub NodeMoveUp()
    2. With TreeView1
    3. Dim hNode As TreeNode = .SelectedNode
    4. If Not (hNode Is Nothing) Then
    5. Dim PreviewNode As TreeNode = hNode.PrevNode
    6. If Not (PreviewNode Is Nothing) Then
    7. .Nodes.Remove(hNode)
    8. If Not (PreviewNode.Parent Is Nothing) Then
    9. PreviewNode.Parent.Nodes.Insert(PreviewNode.Index, hNode)
    10. Else
    11. .Nodes.Insert(PreviewNode.Index, hNode)
    12. End If
    13. .SelectedNode = hNode
    14. .Focus()
    15. Else
    16. .Focus()
    17. End If
    18. End If
    19. End With
    20. End Sub
    21. Private Sub NodeMoveDown()
    22. With TreeView1
    23. Dim hNode As TreeNode = .SelectedNode
    24. If Not (hNode Is Nothing) Then
    25. Dim DownNode As TreeNode = hNode.NextNode
    26. If Not (DownNode Is Nothing) Then
    27. .Nodes.Remove(DownNode)
    28. If Not (hNode.Parent Is Nothing) Then
    29. hNode.Parent.Nodes.Insert(hNode.Index, DownNode)
    30. Else
    31. .Nodes.Insert(hNode.Index, DownNode)
    32. End If
    33. TreeView1.SelectedNode = TreeView1.GetNodeAt(TreeView1.PointToClient(Control.MousePosition))
    34. .SelectedNode = hNode
    35. .Focus()
    36. Else
    37. .Focus()
    38. End If
    39. End If
    40. End With
    41. End Sub


    und damit will ich mir die Posiziondes markierten verschobenen Node sofort anzeigen lassen:

    VB.NET-Quellcode

    1. Private Sub treeView1_AfterSelect(ByVal sender As Object, ByVal e As TreeViewEventArgs) Handles TreeView1.AfterSelect
    2. If (e.Node.Parent IsNot Nothing) Then
    3. If (e.Node.Parent.GetType() Is GetType(TreeNode)) Then
    4. Me.Text = "HauptknotenName : " + e.Node.Parent.Text + ControlChars.Cr + _
    5. "HauptknotenIndex: " + e.Node.Parent.Index.ToString() + ControlChars.Cr + " " + _
    6. "UnterknotenIndex: " + e.Node.Index.ToString()
    7. End If
    8. Else
    9. Me.Text = "Hauptknoten markiert" + " " + e.Node.Index.ToString
    10. End If
    11. End Sub


    Beim nach oben Verschieben funktioniert das auch immer, aber beim nach unten verschieben nicht immer zuverlässig (bei vielen Nodes in der Liste)

    Ohne
    TreeView1.SelectedNode = TreeView1.GetNodeAt(TreeView1.PointToClient(Control.MousePosition))
    im NodeMoveDown wird mir die aktuelle Position gar nicht angezeigt

    was mache ich falsch ,wo ich was ändern?

    vielen Dank für Eure Hilfe und Vorschläge...

    Gruß Majachen