Drag & Drop 2 buttons verschieben aber selbe position behalten?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von oShortyo.

    Drag & Drop 2 buttons verschieben aber selbe position behalten?

    Hallo Community,

    ich weiß nicht wie ich den Code so umschreiben kann, dass er 2 Buttons die eine bestimmte Position haben via Maus tauschen kann. aber so das die Buttons einrasten wie in einem TableLayoutPanel.
    So wie in dem video youtube.com/watch?v=YhyTni6KH0Q

    zurzeit hab ich einen code der wen man ein button zieht, kopiert, aber sich nicht mit dem anderen button "vertauschen" lässt

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Aktion As DragDropEffects ' Hält die gewünschte Aktion fest
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. TableLayoutPanel1.AllowDrop = True ' Drag & Drop zulassen
    5. End Sub
    6. Private Sub btnSmall0_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
    7. Handles Button1.MouseDown
    8. Dim Btn As Button = DirectCast(sender, Button)
    9. If Btn.Parent Is Panel1 Then ' Drag & Drop innerhalb des gleichen Panel
    10. Return
    11. End If
    12. If e.Button = MouseButtons.Left Then ' Ist linke Maustaste gedrückt?
    13. Select Case Control.ModifierKeys
    14. Case Keys.None ' Copy vom Button
    15. Aktion = DragDropEffects.Copy
    16. Case Else ' Sonst
    17. Aktion = DragDropEffects.None
    18. Return
    19. End Select
    20. Me.DoDragDrop(Btn, Aktion) ' Gewünschte Aktion einstellen
    21. End If
    22. End Sub
    23. Private Sub TableLayoutPanel1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TableLayoutPanel1.DragEnter
    24. If e.Data.GetDataPresent(GetType(Button)) Then
    25. e.Effect = Aktion ' Aktion im Mauszeiger anzeigen
    26. End If
    27. End Sub
    28. Private Sub TableLayoutPanel1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TableLayoutPanel1.DragDrop
    29. Dim Btn As Button
    30. Dim BtnNeu As New Button
    31. If e.Data.GetDataPresent(GetType(Button)) Then
    32. Btn = DirectCast(e.Data.GetData(GetType(Button)), Button)
    33. If e.Effect = DragDropEffects.Copy Then ' *** Kopieren ***
    34. BtnNeu.Text = TextBox1.Text ' ... Text
    35. BtnNeu.Size = Btn.Size ' ... Größe
    36. '* ?!?!?!? BtnNeu.Location
    37. TableLayoutPanel1.Controls.Add(BtnNeu) ' Zur Controlsauflistung
    38. End If
    39. End If
    40. End Sub
    41. End Class


    Edit by hal2000:
    - Topic verschoben
    - Code-Tags eingefügt.

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

    chrome150 schrieb:

    zurzeit hab ich einen code der wen man ein button zieht, kopiert, aber sich nicht mit dem anderen button "vertauschen" lässt

    So wie ich es im Video gesehen habe, brauchst du den Button nicht kopieren. Du musst eigentlich nur die Buttons neu positionieren.
    Im einfachsten Fall:
    • Position des Button1 merken
    • Button1 auf Position Button2 ziehen und Position von Button2 übernehmen
    • Button2 auf die gemerkte(alte) Position des Button1 neu positionieren

    chrome150 schrieb:

    bin da noch äußerst unerfahren
    Dafür hast Du Dir aber ein ganz schön kniffliges Problem rausgesucht.
    Gugst Du hier.
    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!
    zum Punkt "einrasten"...

    Denkanstöße:
    wenn der Button mit X % auf einer definierten Fläche gezogen und losgelassen wird, dann auf Position XY ablegen...

    hoffe du weißt was ich damit meine ;)