DragDrop TreeViewNode auf Button

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

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

    DragDrop TreeViewNode auf Button

    VB.NET-Quellcode

    Ich habe einen TreeView

    VB.NET-Quellcode

    1. ' ...
    2. '┌Normal Conduction Test Facility V7.1.x (key/Name 0-0)
    3. '├Parallel Supply Module Ver.II USI Slave 1 (key/Name 1-0)
    4. '| ├7.0 (key/Name 1-1)
    5. '| ├7.1 (key/Name 1-2)
    6. '| └7.2 (key/Name 1-3)
    7. '├Parallel Supply Module Ver.II USI Slave 3 (key/Name 2-0)
    8. '├SER Module 7.0.x (key/Name 3-0)
    9. '├SR_InjSepta USI Slave 1 (key/Name 4-0)
    10. '| ├7.0 (key/Name 4-1)
    11. '| └7.1 (key/Name 4-2)
    12. '...

    Jeder Eintrag soll per DragDrop auf einen Button verschiebbar sein.
    Mit

    VB.NET-Quellcode

    1. Private Sub tv_ModuleSelection_ItemDrag(ByVal sender As Object, ByVal e As ItemDragEventArgs) Handles tv_ModuleSelection.ItemDrag
    2. Dim _tn As TreeNode = CType(e.Item, TreeNode)
    3. DoDragDrop(_tn, DragDropEffects.Move)
    4. End Sub

    starte ich den DragDrop Vorgang.
    Mit

    VB.NET-Quellcode

    1. Private Sub Button_DragDrop(sender As Object, e As DragEventArgs) Handles Button.DragDrop
    2. If Not e.Data.GetDataPresent(GetType(TreeNode)) Then Exit Sub
    3. End Sub

    reagiert der Button.
    Jetzt mein Problem: in Button_DragDrop möchte ich gerne TreeNode.Name und .Key lesen und das bekomme ich nicht hin.
    Ich verstehe nicht ganz, wo sich der TreeNode in e versteckt. Schaue ich mir nämlich e.Data mit dem Debugger an, steht das nichts von TreeNode.

    VB.NET-Quellcode

    1. Dim _s As String = e.Data.GetData(DataFormats.Text).ToString()

    Erzeugt zwar keinen Fehler, sofern ich es innerhalb Button_DragDrop nutze, _s wird aber auch nicht mit einem String gefüllt. Außerdem würde mir das nicht den TreeNode.Name und .Key liefern.
    Wie komme ich da ran?
    Muss ich stattdessen das .MouseDown Ereignis des TreeView nutzen und den Knoten mit X, Y auslesen?
    .ItemDrag liefert mir den Knoten doch eigentlich direkt.
    @roepke Probier mal

    C#-Quellcode

    1. TreeNode tn = (TreeNode)e.Data.GetData(typeof(TreeNode).FullName);
    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!