When using a drag-and-drop operation in migrated VB.NET apps to implement a move or copy operation between two ListBox controls, the element being copied or moved is the last element “touched” by the mouse, instead of the control over which the drag operation begins.
Let’s assume that the drag operation is started by the following VB6 code:
Private Sub List1_MouseMove(ByRef Button As Short, ByRef Shift As Short, ByRef X As Single, ByRef Y As Single)
If Button = VBRUN.MouseButtonConstants.vbLeftButton And List1.ListIndex >= 0 Then
List1.Drag(1)
End If
End Sub
There are two ways to work around this issue:
- Use the right mouse button to start the drag operation:
Private Sub List1_MouseMove(ByRef Button As Short, ByRef Shift As Short, ByRef X As Single, ByRef Y As Single)
If Button = VBRUN.MouseButtonConstants.vbRightButton And List1.ListIndex >= 0 Then
List1.Drag(1)
End If
End Sub
- Set the ListBox’s Capture property to False immediately after the drag operation has started:
Private Sub List1_MouseMove(ByRef Button As Short, ByRef Shift As Short, ByRef X As Single, ByRef Y As Single)
If Button = VBRUN.MouseButtonConstants.vbLeftButton And List1.ListIndex >= 0 Then
List1.Drag(1)
List1.Capture = False
End If
End Sub