DragDropEffects Enumeration
Specifies the possible effects of a drag-and-drop operation.
This enumeration has a FlagsAttribute attribute that allows a bitwise combination of its member values.
Assembly: System.Windows.Forms (in System.Windows.Forms.dll)
| Member name | Description | |
|---|---|---|
| All | The combination of the Copy, Move, and Scroll effects. | |
| Copy | The data from the drag source is copied to the drop target. | |
| Link | The data from the drag source is linked to the drop target. | |
| Move | The data from the drag source is moved to the drop target. | |
| None | The drop target does not accept the data. | |
| Scroll | The target can be scrolled while dragging to locate a drop position that is not currently visible in the target. |
This enumeration is used by the following classes: DragEventArgs, GiveFeedbackEventArgs, and Control.
You can use DragDropEffects to display different mouse pointers for drag-and-drop operations. For example, you can display a plus symbol for a Copy drag-and-drop operation, an arrow symbol for a Move drag-and-drop operation, or a red circle with a line through it symbol for a None drag-and-drop operation.
If you want to drop data at a position in the target that is not currently visible, you could scroll the target while dragging. If a target does not support scrolling, you must make sure that the drop position is visible in the target before you begin the drag-and-drop operation. The following are some scenarios when you might want to scroll a target:
You are dragging text into a document, and you want to drop the text at a position not visible in the document window.
You are dragging a file into a file tree, and you want to drop the file on a node not visible in the file tree.
This code example demonstrates using the DragDropEffects enumeration when the user moves the mouse over the drop target during a drag-and-drop operation. This code example is part of a larger example provided for the DoDragDrop method of the Control class. See the DoDragDrop method for the complete code example.
void ListDragTarget_DragOver( Object^ /*sender*/, System::Windows::Forms::DragEventArgs^ e ) { // Determine whether string data exists in the drop data. If not, then // the drop effect reflects that the drop cannot occur. if ( !e->Data->GetDataPresent( System::String::typeid ) ) { e->Effect = DragDropEffects::None; DropLocationLabel->Text = "None - no string data."; return; } // Set the effect based upon the KeyState. if ( (e->KeyState & (8 + 32)) == (8 + 32) && ((e->AllowedEffect & DragDropEffects::Link) == DragDropEffects::Link) ) { // KeyState 8 + 32 = CTL + ALT // Link drag-and-drop effect. e->Effect = DragDropEffects::Link; } else if ( (e->KeyState & 32) == 32 && ((e->AllowedEffect & DragDropEffects::Link) == DragDropEffects::Link) ) { // ALT KeyState for link. e->Effect = DragDropEffects::Link; } else if ( (e->KeyState & 4) == 4 && ((e->AllowedEffect & DragDropEffects::Move) == DragDropEffects::Move) ) { // SHIFT KeyState for move. e->Effect = DragDropEffects::Move; } else if ( (e->KeyState & 8) == 8 && ((e->AllowedEffect & DragDropEffects::Copy) == DragDropEffects::Copy) ) { // CTL KeyState for copy. e->Effect = DragDropEffects::Copy; } else if ( (e->AllowedEffect & DragDropEffects::Move) == DragDropEffects::Move ) { // By default, the drop action should be move, if allowed. e->Effect = DragDropEffects::Move; } else e->Effect = DragDropEffects::None; // Get the index of the item the mouse is below. // The mouse locations are relative to the screen, so they must be // converted to client coordinates. indexOfItemUnderMouseToDrop = ListDragTarget->IndexFromPoint( ListDragTarget->PointToClient( Point(e->X,e->Y) ) ); // Updates the label text. if ( indexOfItemUnderMouseToDrop != ListBox::NoMatches ) { DropLocationLabel->Text = String::Concat( "Drops before item # ", (indexOfItemUnderMouseToDrop + 1) ); } else DropLocationLabel->Text = "Drops at the end."; }
Available since 1.1