vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Maus & Tastatur · Drag & Drop   |   VB-Versionen: VB2005, VB200817.07.09
Drag & Drop zwischen zwei ListBoxen

Dieser Tipp zeigt, wie man Einträge mittels Drag & Drop zwischen zwei ListBoxen kopieren bzw. verschieben kann.

Autor:   Dieter OtterBewertung:  Views:  12.733 
www.tools4vb.deSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Heute zeigen wir Ihnen, wie man den selektierten Eintrag aus einer ListBox via Drag & Drop in eine zweite ListBox verschieben bzw. kopieren kann.

Hierbei soll folgendes gelten:
Wird der Eintrag mit der Maus bei gedrückter Strg-Taste in die zweite ListBox gezogen, soll der Eintrag kopiert werden. Andernfalls soll der Eintrag in die zweite ListBox verschoben werden.

Platzieren Sie zwei ListBoxen auf die Form und fügen nachfolgenden Code in den Code-Teil der Form ein:

Public Class Form1
  ' aktuelle Mauszeiger-Position
  Private mPoint As Point
  Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
 
    ' ListBox1 mit ein paar Einträgen füllen
    With ListBox1.Items
      For i As Integer = 1 To 15
        .Add("Eintrag " & CStr(i))
      Next
    End With
 
    ' ListBox2 soll Daten via Drag & Drop empfangen können
    ListBox2.AllowDrop = True
  End Sub
  Private Sub ListBox1_MouseDown(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
 
    ' bei gedrückter linker Maustaste, Koordinaten merken
    If e.Button = Windows.Forms.MouseButtons.Left Then
      mPoint = e.Location
    End If
  End Sub
  Private Sub ListBox1_MouseMove(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseMove
 
    ' Prüfen, ob Maus bei gedrückter Taste bewegt wurde
    ' Erst wenn die Maus mind. 5 Pixel bewegt wurde, 
    ' Drag & Drop Vorgang einleiten
    If e.Button = Windows.Forms.MouseButtons.Left Then
      If Math.Abs(e.X - mPoint.X) >= 5 OrElse Math.Abs(e.Y - mPoint.Y) >= 5 Then
        With ListBox1
          If .SelectedIndex >= 0 Then
            .DoDragDrop(.SelectedItem.ToString, DragDropEffects.Copy Or DragDropEffects.Move)
          End If
        End With
      End If
    End If
  End Sub
  Private Sub ListBox2_DragEnter(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragEnter
 
    ' Prüfen, ob das Data-Objekt "Text" enthält
    If e.Data.GetDataPresent(DataFormats.Text) Then
      ' Drag & Drop zulassen
      If (e.KeyState And 8) = 0 Then
        ' Verschieben
        e.Effect = DragDropEffects.Move
      Else
        ' bei gedrückter STRG-Taste, Kopieren
        e.Effect = DragDropEffects.Copy
      End If
    Else
      ' keine Drag & Drop Aktion zulassen
      e.Effect = DragDropEffects.None
    End If
  End Sub
  Private Sub ListBox2_DragDrop(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragDrop
 
    ' Data-Objekt auslesen
    Dim sItem As String = e.Data.GetData(DataFormats.Text)
 
    With ListBox2
      ' Eintrag unter dem Mauszeiger ermitteln
      Dim p As Point = .PointToClient(Cursor.Position)
      Dim index As Integer = .IndexFromPoint(p)
 
      If index < 0 Then
        ' ans Ende der Liste anfügen
        .Items.Add(sItem)
      Else
        ' an aktuelle Position einfügen
        .Items.Insert(index, sItem)
      End If
 
      ' ist die STRG-Taste nicht gedrückt, soll der Eintrag 
      ' von der ListBox1 in die ListBox VERSCHOBEN werden, d.h.
      ' es muss der selektierte Eintrag aus der 1. ListBox 
      ' gelöscht werden
      If e.Effect = DragDropEffects.Move Then
        ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
      End If
    End With
  End Sub
End Class



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2019 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.