How to Move Controls at Run Time By Using Drag and Drop (103062)



The information in this article applies to:

  • Microsoft Visual Basic Standard Edition for Windows 1.0
  • Microsoft Visual Basic Standard Edition for Windows 2.0
  • Microsoft Visual Basic Standard Edition for Windows 3.0
  • Microsoft Visual Basic Professional Edition for Windows 2.0
  • Microsoft Visual Basic Professional Edition for Windows 3.0

This article was previously published under Q103062

SUMMARY

You can move controls at run time by using manual dragging with the Drag method. Automatic dragging (DragMode = 1) does not work well for repositioning controls at run time.

MORE INFORMATION

The key points to remember when using drag and drop to move controls at run time are:
  • In the MouseDown event, save the X and Y parameters. This position is relative to the upper left corner of the control to drag. Note that the MouseDown event only occurs when DragMode is set to Manual (0).
  • In the DragDrop event, move the control to the position of the mouse pointer adjusted by the position saved in MouseDown.

Example Program

The following example program demonstrates how to reposition a picture box at run time. Place the pieces of the program in the appropriate event procedures.
Dim Save_X As Single
Dim Save_Y As Single

' Enter the following Sub as one, single line:

Sub Picture1_MouseDown (Button As Integer, Shift As Integer, X As
   Single, Y As Single)
   Save_X = X       ' save mouse position (relative to this control)
   Save_Y = Y
   Picture1.Drag 1  ' begin dragging
End Sub

' Enter the following Sub as one, single line:

Sub Picture1_MouseUp (Button As Integer, Shift As Integer, X As
   Single, Y As Single)
   Picture1.Drag 2  ' end dragging, do DragDrop event
End Sub

Sub Form_DragDrop (Source As Control, X As Single, Y As Single)
   ' Move the control to the position of the mouse pointer.
   ' Adjust it by the distance the mouse pointer to the upper
   ' left corner of the control.
   Source.Move X - Save_X, Y - Save_Y
End Sub

Sub Picture1_DragDrop (Source As Control, X As Single, Y As Single)
   ' This handles the case when the control is dropped on itself
   ' as would happen if it was only moved a small amount.
   ' This is similar to Form_DragDrop except that the X and Y
   ' parameters are relative to this control, not the form.
   Source.Move Picture1.Left + X - Save_X, Picture1.Top + Y - Save_Y
End Sub
				

Modification Type:MajorLast Reviewed:12/9/2003
Keywords:KB103062