VB6 Drag and Drop Overview

1. VB6 Drag and Drop Overview

Drag and drop is actually the same as copy & paste using the mouse instead of the keyboard. In both cases you have a source control (where you are cutting or copying from) and a target control (where you are pasting to). During either operation, a copy of the data is maintained in memory. Cut and paste uses the Clipboard; drag and drop uses a DataObject object, which is in essence a private clipboard.

VB6 supported several drag and drop types: Standard and OLE drag and drop with manual and automatic modes for both types.

1.1. Standard Drag and Drop

Data is passed by using the source control as a drag and drop parameter. The drag operation sets the source control in drag and drop mode. DragOver and DragDrop event handlers in the target control receive the source control so they can obtain the data to be copied or moved from the source control itself.

1.2. OLE Drag and Drop

Data is passed by using the source control as a drag and drop parameter. The data to be copied or moved is set at the beginning of the drag and drop operation inside the OLEStartDrag event handler or by demand by the OLESetData event handler. The OLEDragOver and OLEDragDrop event handlers received the data in a DataObject parameter.

1.3. .NET drag and drop

Drag and Drop in .NET is very similar to VB6 manual OLE drag and drop. The concept and functionality is the same but the names and sequences of events are different.

Handling of the DragOver event is very different in .NET. VB6 provided one handler with the action specified by a state parameter. In .NET the handling is now realized by three different event handlers, one handler for each possible DragOver “states”: drag enter, drag over and drag leave.

Programming of the drag and drop feedback to the user has changed as well. In VB6, the visual notification of allowed drag and drop operations had to be programmed in the DragOver event, where the mouse icon could be changed to another to indicate that the control allows drag and drop operations. The code in the DragDrop event was the one that managed what to do with the data dropped into the control. In .NET, the controls that allow drag and drop events need to have that feature enabled first. The feature is enabled by setting the AllowDrop property of the control to true. Also, the types of allowed drag and drop operations must be specified by setting a DragDropEffect value in the drag over or drag enter event handlers.

.NET now handles automatically the changes in mouse icons during drag and drop operations. If the programmer desires to handle mouse pointer icons manually, the procedure for doing it is somewhat different than in VB6. In VB6’s standard drag and drop, the mouse pointer changes had to be specified in the event handlers of each one of the target controls. In .NET, handling this functionality can be simplified by handling the mouse pointer changes in the GiveFeedback event handler of the source control.

1.4. Differences between VB6 standard drag and drop and .NET drag and drop.

Functionality Visual Basic 6.0 .NET
Start drag method object.Drag object.DoDragDrop
Drag drop event handler object_DragDrop object_DragDrop
Drag Over event handler object_DragOver

object_DragEnter

object_DragOver

object_DragLeave

Drag Over states state parameter of DragOver event handler

object_DragEnter

object_DragOver

object_DragLeave

Drag icon property object.DragIcon in each control’s DragOver event handler

1. GiveFeedbackEventArgs parameter in drag over event handler (auto)

2. object.Cursor property of target control (custom)

1.5. Differences between VB6 OLE drag and drop and .NET drag and drop.

Functionality Visual Basic 6.0 .NET
Start drag method object.OLEDrag object.DoDragDrop
Start drag event handler object_OLEStartDrag N/A (use DoDragDrop method)
Drag Drop event handler object_OLEDragDrop object_DragDrop
Drag Over event handler object_OLEDragOver

object_DragEnter

object_DragOver

object_DragLeave

Feedback event handler object_OLEGiveFeedback object_GiveFeedback
Drag complete handler object_OLECompleteDrag object_DragDrop (target)
Set Data event handler object_OLESetData N/A ( use DragEventArgs Data.SetData method in DragDrop event handler)

See also:

Talk To An Engineer