VB.Net Tutorial/GUI/ListBox Drag Drop
Drag and drop ListBox
<source lang="vbnet">Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms public class ListBoxDragDrop
public Shared Sub Main Application.Run(New Form1) End Sub
End class
Public Class Form1
Private dragBounds As Rectangle Private dragMethod As String Private Sub ListBox1_DragEnter(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox1.DragEnter " ----- Yes, we accept the items. If (e.Data.GetDataPresent(ListBox2.SelectedItems. _ GetType()) = True) Then _ e.Effect = DragDropEffects.Move End Sub Private Sub ListBox1_DragDrop(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox1.DragDrop " ----- Accept the dropped items. For Each oneItem As Object In _ e.Data.GetData(ListBox2.SelectedItems.GetType()) ListBox1.Items.Add(oneItem) Next oneItem End Sub Private Sub ListBox1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles ListBox1.MouseDown, ListBox2.MouseDown " ----- Prepare the draggable content. If (CType(sender, ListBox).SelectedItems.Count = 0) Then Return " ----- Don"t start the drag yet. Wait until we move a " certain amount. dragBounds = New Rectangle(New Point(e.X - _ (SystemInformation.DragSize.Width / 2), _ e.Y - (SystemInformation.DragSize.Height / 2)), _ SystemInformation.DragSize) If (sender Is ListBox1) Then dragMethod = "1to2" Else dragMethod = "2to1" End If End Sub Private Sub ListBox1_MouseMove(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles ListBox1.MouseMove " ----- Ignore if not dragging from ListBox1. If (dragMethod <> "1to2") Then Return " ----- Have we left the drag boundary? If (dragBounds.Contains(e.X, e.Y) = False) Then " ----- Start the drag-and-drop operation. If (ListBox1.DoDragDrop(ListBox1.SelectedItems, _ DragDropEffects.Move) = _ DragDropEffects.Move) Then " ----- Successful move. Remove the items from " this list. Do While ListBox1.SelectedItems.Count > 0 ListBox1.Items.Remove(ListBox1.SelectedItems(0)) Loop End If dragMethod = "" End If End Sub Private Sub ListBox1_MouseUp(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles ListBox1.MouseUp, ListBox2.MouseUp " ----- End of drag-and-drop. dragMethod = "" End Sub Private Sub ListBox2_DragEnter(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox2.DragEnter " ----- Yes, we accept the items. If (e.Data.GetDataPresent(ListBox1.SelectedItems. _ GetType()) = True) Then _ e.Effect = DragDropEffects.Move End Sub Private Sub ListBox2_DragDrop(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox2.DragDrop " ----- Accept the dropped items. For Each oneItem As Object In _ e.Data.GetData(ListBox1.SelectedItems.GetType()) ListBox2.Items.Add(oneItem) Next oneItem End Sub Private Sub ListBox2_MouseMove(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles ListBox2.MouseMove " ----- Ignore if not dragging from ListBox2. If (dragMethod <> "2to1") Then Return " ----- Have we left the drag boundary? If (dragBounds.Contains(e.X, e.Y) = False) Then " ----- Start the drag-and-drop operation. If (ListBox2.DoDragDrop(ListBox2.SelectedItems, _ DragDropEffects.Move) = _ DragDropEffects.Move) Then " ----- Successful move. Remove the items from " this list. Do While ListBox2.SelectedItems.Count > 0 ListBox2.Items.Remove(ListBox2.SelectedItems(0)) Loop End If dragMethod = "" End If End Sub
End Class
<Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()> _ Partial Class Form1
Inherits System.Windows.Forms.Form "Form overrides dispose to clean up the component list. <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) If disposing AndAlso components IsNot Nothing Then components.Dispose() End If MyBase.Dispose(disposing) End Sub "Required by the Windows Form Designer Private components As System.ruponentModel.IContainer "NOTE: The following procedure is required by the Windows Form Designer "It can be modified using the Windows Form Designer. "Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.ListBox1 = New System.Windows.Forms.ListBox Me.ListBox2 = New System.Windows.Forms.ListBox Me.SuspendLayout() " "ListBox1 " Me.ListBox1.AllowDrop = True Me.ListBox1.FormattingEnabled = True Me.ListBox1.Items.AddRange(New Object() {"One", "Two", "Three", "Four", "Five", "Six"}) Me.ListBox1.Location = New System.Drawing.Point(8, 8) Me.ListBox1.Name = "ListBox1" Me.ListBox1.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended Me.ListBox1.Size = New System.Drawing.Size(192, 95) Me.ListBox1.TabIndex = 0 " "ListBox2 " Me.ListBox2.AllowDrop = True Me.ListBox2.FormattingEnabled = True Me.ListBox2.Location = New System.Drawing.Point(208, 8) Me.ListBox2.Name = "ListBox2" Me.ListBox2.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended Me.ListBox2.Size = New System.Drawing.Size(192, 95) Me.ListBox2.TabIndex = 1 " "Form1 " Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(408, 112) Me.Controls.Add(Me.ListBox2) Me.Controls.Add(Me.ListBox1) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.MaximizeBox = False Me.Name = "Form1" Me.Text = "ListBox Drag-and-Drop" Me.ResumeLayout(False) End Sub Friend WithEvents ListBox1 As System.Windows.Forms.ListBox Friend WithEvents ListBox2 As System.Windows.Forms.ListBox
End Class</source>
Drag file from File Explore to ListBox
<source lang="vbnet">Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms public class FileDragDrop
public Shared Sub Main Application.Run(New Form1) End Sub
End class Public Class Form1
Private Sub ListBox1_DragEnter(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox1.DragEnter If (e.Data.GetDataPresent(DataFormats.FileDrop) =True) Then e.Effect = DragDropEffects.Copy End If End Sub Private Sub ListBox1_DragDrop(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox1.DragDrop For Each oneFile As String In _ e.Data.GetData(DataFormats.FileDrop) ListBox1.Items.Add(oneFile) Next oneFile End Sub
End Class
<Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()> _ Partial Class Form1
Inherits System.Windows.Forms.Form "Form overrides dispose to clean up the component list. <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) If disposing AndAlso components IsNot Nothing Then components.Dispose() End If MyBase.Dispose(disposing) End Sub "Required by the Windows Form Designer Private components As System.ruponentModel.IContainer "NOTE: The following procedure is required by the Windows Form Designer "It can be modified using the Windows Form Designer. "Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.ListBox1 = New System.Windows.Forms.ListBox Me.SuspendLayout() " "ListBox1 " Me.ListBox1.AllowDrop = True Me.ListBox1.FormattingEnabled = True Me.ListBox1.Location = New System.Drawing.Point(8, 8) Me.ListBox1.Name = "ListBox1" Me.ListBox1.Size = New System.Drawing.Size(576, 238) Me.ListBox1.TabIndex = 0 " "Form1 " Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(594, 256) Me.Controls.Add(Me.ListBox1) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.MaximizeBox = False Me.Name = "Form1" Me.Text = "Drag and Drop Files" Me.ResumeLayout(False) End Sub Friend WithEvents ListBox1 As System.Windows.Forms.ListBox
End Class</source>