Previous | Index | Next 

[PRB] Drag-and-drop operations inside a ListBox control may deliver fake results

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:

  1. 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
  2. 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

 

Previous | Index | Next