Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Evento Control.DragOver

 

Ocorre quando um objeto é arrastado sobre os limites do controle.

Namespace:   System.Windows.Forms
Assembly:  System.Windows.Forms (em System.Windows.Forms.dll)

public event DragEventHandler DragOver

The E:System.Windows.Forms.Control.DragOver event is raised when the mouse cursor moves within the bounds of the control during a drag-and-drop operation.

The following describes how and when events related to drag-and-drop operations are raised.

The M:System.Windows.Forms.Control.DoDragDrop(System.Object,System.Windows.Forms.DragDropEffects) method determines the control under the current cursor location. It then checks to see if the control is a valid drop target.

If the control is a valid drop target, the E:System.Windows.Forms.Control.GiveFeedback event is raised with the drag-and-drop effect specified. For a list of drag-and-drop effects, see the T:System.Windows.Forms.DragDropEffects enumeration.

Changes in the mouse cursor position, keyboard state, and mouse button state are tracked.

  • If the user moves out of a window, the E:System.Windows.Forms.Control.DragLeave event is raised.

  • If the mouse enters another control, the E:System.Windows.Forms.Control.DragEnter for that control is raised.

  • If the mouse moves but stays within the same control, the E:System.Windows.Forms.Control.DragOver event is raised.

If there is a change in the keyboard or mouse button state, theE:System.Windows.Forms.Control.QueryContinueDrag event is raised and determines whether to continue the drag, to drop the data, or to cancel the operation based on the value of the P:System.Windows.Forms.QueryContinueDragEventArgs.Action property of the event's T:System.Windows.Forms.QueryContinueDragEventArgs.

  • If the value of T:System.Windows.Forms.DragAction value is Continue, the E:System.Windows.Forms.Control.DragOver event is raised to continue the operation and the E:System.Windows.Forms.Control.GiveFeedback event is raised with the new effect so appropriate visual feedback can be set. For a list of valid drop effects, see the T:System.Windows.Forms.DragDropEffects enumeration.

    System_CAPS_noteObservação

    The E:System.Windows.Forms.Control.DragOver and E:System.Windows.Forms.Control.GiveFeedback events are paired so that as the mouse moves across the drop target, the user is given the most up-to-date feedback on the mouse's position.

  • If the value of T:System.Windows.Forms.DragAction is Drop, the drop effect value is returned to the source, so the source application can perform the appropriate operation on the source data; for example, cut the data if the operation was a move.

  • If the value of T:System.Windows.Forms.DragAction is Cancel, the E:System.Windows.Forms.Control.DragLeave event is raised.

    System_CAPS_noteObservação

    The P:System.Windows.Forms.DragEventArgs.X and P:System.Windows.Forms.DragEventArgs.Y properties of the T:System.Windows.Forms.DragEventArgs are in screen coordinates, not client coordinates. The following line of C# code converts the properties to a client T:System.Drawing.Point:

    Point clientPoint = targetControl.PointToClient(new Point(de.X, de.Y));

For more information about handling events, see Handling and Raising Events.

The following code example demonstrates a drag-and-drop operation between two T:System.Windows.Forms.ListBox controls. The example calls the M:System.Windows.Forms.Control.DoDragDrop(System.Object,System.Windows.Forms.DragDropEffects) method when the drag action starts. The drag action starts if the mouse has moved more than P:System.Windows.Forms.SystemInformation.DragSize from the mouse location during the E:System.Windows.Forms.Control.MouseDown event. The M:System.Windows.Forms.ListBox.IndexFromPoint(System.Drawing.Point) method is used to determine the index of the item to drag during the MouseDown event.

The example also demonstrates using custom cursors for the drag-and-drop operation. The example requires that two cursor files, 3dwarro.cur and 3dwno.cur, exist in the application directory, for the custom drag and no-drop cursors, respectively. The custom cursors will be used if the UseCustomCursorsCheckT:System.Windows.Forms.CheckBox is checked. The custom cursors are set in the E:System.Windows.Forms.Control.GiveFeedback event handler.

The keyboard state is evaluated in the E:System.Windows.Forms.Control.DragOver event handler for the right ListBox, to determine what the drag operation will be based on state of the SHIFT, CTRL, ALT, or CTRL+ALT keys. The location in the ListBox where the drop would occur is also determined during the DragOver event. If the data to drop is not a String, then the P:System.Windows.Forms.DragEventArgs.Effect is set to None in T:System.Windows.Forms.DragDropEffects. Finally, the status of the drop is displayed in the DropLocationLabelT:System.Windows.Forms.Label.

The data to drop for the right ListBox is determined in the E:System.Windows.Forms.Control.DragDrop event handler and the String value is added at the appropriate place in the ListBox. If the drag operation moves outside the bounds of the form, then the drag-and-drop operation is canceled in the E:System.Windows.Forms.Control.QueryContinueDrag event handler.

This code excerpt demonstrates using the E:System.Windows.Forms.Control.DragOver event. See the M:System.Windows.Forms.Control.DoDragDrop(System.Object,System.Windows.Forms.DragDropEffects) method for the complete code example.

private 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(typeof(System.String))) {

        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(new Point(e.X, e.Y)));

    // Updates the label text.
    if (indexOfItemUnderMouseToDrop != ListBox.NoMatches){

        DropLocationLabel.Text = "Drops before item #" + (indexOfItemUnderMouseToDrop + 1);
    } else
        DropLocationLabel.Text = "Drops at the end.";

}

.NET Framework
Disponível desde 1.1
Retornar ao início
Mostrar: