Drag and Drop in einer Text an beliebiger Stelle

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von wsk1000.

    Drag and Drop in einer Text an beliebiger Stelle

    Hallo
    ich habe da mal so eine Frage...
    und zwar. Ich habe einen Code für drag and drop. Doch wenn ich das prog dann ausführe und Dan droppe wird der Text nur zur Textbox hinzugefügt, und man hat nicht irgendwie die Möglichkeit den curser zu verschieben. Ich weis glaube ich auch an was es liegt, und zwar an Zeile14.

    Code anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
    2. Button1.DoDragDrop("der Text...", DragDropEffects.Copy Or DragDropEffects.Move)
    3. End Sub
    4. Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter
    5. If (e.Data.GetDataPresent(DataFormats.Text)) Then
    6. e.Effect = DragDropEffects.Copy
    7. Else
    8. e.Effect = DragDropEffects.None
    9. End If
    10. End Sub
    11. Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop
    12. TextBox1.Text += e.Data.GetData(DataFormats.Text).ToString
    13. End Sub

    (Code habe ich von Mdsn)
    Upps. Sorry habe mich wahrscheinlich nicht genau ausgedrückt...

    ich will (dass kennst du wahrscheinlich von anderen Programmen), dass wenn man zieht und wenn man über der Textbox ist, dass man den curser sozusagen verschieben kann und zwar zu der Stelle, wo man gerne den Text hinhaben will.
    Ahh verstehe,
    das hier müsste funktionieren:

    vb.net Code

    VB.NET-Quellcode

    1. Private Sub TextBox1_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragOver
    2. If e.Data.GetDataPresent(DataFormats.StringFormat) Then
    3. e.Effect = DragDropEffects.Copy
    4. 'Setzt die Cursorposition
    5. TextBox1.Select(TextBoxCursorPos(TextBox1, e.X, e.Y), 0)
    6. Else
    7. e.Effect = DragDropEffects.None
    8. End If
    9. End Sub
    10. ' Dropftunktion
    11. Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop
    12. TextBox1.SelectedText = e.Data.GetData(DataFormats.StringFormat)
    13. End Sub
    14. Private Const EM_CHARFROMPOS As Int32 = &HD7
    15. Private Structure POINTAPI
    16. Public X As Integer
    17. Public Y As Integer
    18. End Structure
    19. Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As _
    20. Int32, ByVal wParam As Int32, ByVal lParam As Int32) As _
    21. Long
    22. ' setzt den Text hinter den Cursor
    23. Public Function TextBoxCursorPos(ByVal txt As TextBox, ByVal X As Single, ByVal Y As Single) As Long
    24. ' konvertiert die coordinaten
    25. Dim pt As Point = TextBox1.PointToClient(New Point(X, Y))
    26. TextBoxCursorPos = SendMessageLong(txt.Handle, EM_CHARFROMPOS, 0&, CLng(pt.X + pt.Y * &H10000)) And &HFFFF&
    27. End Function


    Grüße