Control.DragOver Control.DragOver Control.DragOver Control.DragOver Event

Définition

Se produit lorsqu'un objet est déplacé sur les limites d'un contrôle.Occurs when an object is dragged over the control's bounds.

public:
 event System::Windows::Forms::DragEventHandler ^ DragOver;
public event System.Windows.Forms.DragEventHandler DragOver;
member this.DragOver : System.Windows.Forms.DragEventHandler 
Public Custom Event DragOver As DragEventHandler 

Exemples

L’exemple de code suivant illustre une opération de glisser-déplacer entre deux ListBox contrôles.The following code example demonstrates a drag-and-drop operation between two ListBox controls. L’exemple appelle la DoDragDrop méthode au démarrage de l’action glisser.The example calls the DoDragDrop method when the drag action starts. L’action glisser démarre si la souris a été déplacée SystemInformation.DragSize au-delà de l’emplacement de la souris pendant l' MouseDown événement.The drag action starts if the mouse has moved more than SystemInformation.DragSize from the mouse location during the MouseDown event. La IndexFromPoint méthode est utilisée pour déterminer l’index de l’élément à faire glisser pendant MouseDown l’événement.The IndexFromPoint method is used to determine the index of the item to drag during the MouseDown event.

L’exemple illustre également l’utilisation de curseurs personnalisés pour l’opération de glisser-déplacer.The example also demonstrates using custom cursors for the drag-and-drop operation. L’exemple requiert que deux fichiers curseur, 3dwarro.cur et 3dwno.cur, existent dans le répertoire de l’application, respectivement pour les curseurs de glisser-déplacer personnalisés.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. Les curseurs personnalisés sont utilisés si le UseCustomCursorsCheck CheckBox est activé.The custom cursors will be used if the UseCustomCursorsCheckCheckBox is checked. Les curseurs personnalisés sont définis dans le GiveFeedback gestionnaire d’événements.The custom cursors are set in the GiveFeedback event handler.

L’état du clavier est évalué dans DragOver le gestionnaire d’événements pour ListBoxle droit, afin de déterminer l’opération de glissement en fonction de l’état des touches Maj, CTRL, ALT ou Ctrl + Alt.The keyboard state is evaluated in the 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. L’emplacement ListBox où la suppression se produit est également déterminé au cours de l' DragOver événement.The location in the ListBox where the drop would occur is also determined during the DragOver event. Si les données à supprimer ne sont pas Stringun, le DragEventArgs.Effect a la valeur None dans DragDropEffects.If the data to drop is not a String, then the DragEventArgs.Effect is set to None in DragDropEffects. Enfin, l’état de l’instruction DROP est affiché dans DropLocationLabella Label.Finally, the status of the drop is displayed in the DropLocationLabelLabel.

Les données à supprimer pour le droit ListBox sont déterminées DragDrop dans le gestionnaire d' String événements et la valeur est ajoutée à l’emplacement ListBoxapproprié dans le.The data to drop for the right ListBox is determined in the DragDrop event handler and the String value is added at the appropriate place in the ListBox. Si l’opération glisser est déplacée en dehors des limites du formulaire, l’opération de glisser-déplacer est annulée dans le QueryContinueDrag gestionnaire d’événements.If the drag operation moves outside the bounds of the form, then the drag-and-drop operation is canceled in the QueryContinueDrag event handler.

Cet extrait de code illustre l' DragOver utilisation de l’événement.This code excerpt demonstrates using the DragOver event. Consultez la DoDragDrop méthode pour obtenir l’exemple de code complet.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.";
}
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.";

}
Private Sub ListDragTarget_DragOver(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragOver
    ' Determine whether string data exists in the drop data. If not, then
    ' the drop effect reflects that the drop cannot occur.
    If Not (e.Data.GetDataPresent(GetType(System.String))) Then

        e.Effect = DragDropEffects.None
        DropLocationLabel.Text = "None - no string data."
        Return
    End If

    ' Set the effect based upon the KeyState.
    If ((e.KeyState And (8 + 32)) = (8 + 32) And _
        (e.AllowedEffect And DragDropEffects.Link) = DragDropEffects.Link) Then
        ' KeyState 8 + 32 = CTL + ALT

        ' Link drag-and-drop effect.
        e.Effect = DragDropEffects.Link

    ElseIf ((e.KeyState And 32) = 32 And _
        (e.AllowedEffect And DragDropEffects.Link) = DragDropEffects.Link) Then

        ' ALT KeyState for link.
        e.Effect = DragDropEffects.Link

    ElseIf ((e.KeyState And 4) = 4 And _
        (e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move) Then

        ' SHIFT KeyState for move.
        e.Effect = DragDropEffects.Move

    ElseIf ((e.KeyState And 8) = 8 And _
        (e.AllowedEffect And DragDropEffects.Copy) = DragDropEffects.Copy) Then

        ' CTL KeyState for copy.
        e.Effect = DragDropEffects.Copy

    ElseIf ((e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move) Then

        ' By default, the drop action should be move, if allowed.
        e.Effect = DragDropEffects.Move

    Else
        e.Effect = DragDropEffects.None
    End If

    ' Gets 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) Then

        DropLocationLabel.Text = "Drops before item #" & (indexOfItemUnderMouseToDrop + 1)
    Else
        DropLocationLabel.Text = "Drops at the end."
    End If

End Sub

Remarques

L' DragOver événement est déclenché lorsque le curseur de la souris se déplace dans les limites du contrôle pendant une opération de glisser-déplacer.The DragOver event is raised when the mouse cursor moves within the bounds of the control during a drag-and-drop operation.

Les lignes suivantes décrivent de quelle façon et à quel moment se déclenchent les événements liés aux opérations de glisser-déplacer.The following describes how and when events related to drag-and-drop operations are raised.

La DoDragDrop méthode détermine le contrôle sous l’emplacement actuel du curseur.The DoDragDrop method determines the control under the current cursor location. Il vérifie ensuite si le contrôle est une cible de dépôt valide.It then checks to see if the control is a valid drop target.

Si le contrôle est une cible de déplacement valide, GiveFeedback l’événement est déclenché avec l’effet de glisser-déplacer spécifié.If the control is a valid drop target, the GiveFeedback event is raised with the drag-and-drop effect specified. Pour obtenir la liste des effets de glisser-déposer, consultez l’énumération DragDropEffects.For a list of drag-and-drop effects, see the DragDropEffects enumeration.

Les modifications apportées à la position du curseur de la souris, à l'état du clavier et à l'état du bouton de la souris font l'objet d'un suivi.Changes in the mouse cursor position, keyboard state, and mouse button state are tracked.

  • Si l'utilisateur se déplace hors de la fenêtre, l'événement DragLeave est déclenché.If the user moves out of a window, the DragLeave event is raised.

  • Si la souris entre dans un autre contrôle, l'événement DragEnter du contrôle est déclenché.If the mouse enters another control, the DragEnter for that control is raised.

  • Si la souris se déplace uniquement dans les limites du même contrôle, l'événement DragOver est déclenché.If the mouse moves but stays within the same control, the DragOver event is raised.

En cas de modification de l’état du clavier ou du bouton de la QueryContinueDrag souris, l’événement est déclenché et détermine s’il faut continuer l’opération glisser, déplacer les données ou annuler l’opération en fonction de la Action valeur de la QueryContinueDragEventArgspropriété de l’événement.If there is a change in the keyboard or mouse button state, the 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 Action property of the event's QueryContinueDragEventArgs.

  • Si la valeur de DragAction la valeur Continueest, DragOver l’événement est déclenché pour poursuivre l’opération et GiveFeedback l’événement est déclenché avec le nouvel effet, si bien que la rétroaction visuelle appropriée peut être définie.If the value of DragAction value is Continue, the DragOver event is raised to continue the operation and the GiveFeedback event is raised with the new effect so appropriate visual feedback can be set. Pour obtenir la liste des effets de dépôt valides, consultez l’énumération DragDropEffects.For a list of valid drop effects, see the DragDropEffects enumeration.

    Notes

    Les DragOver événements GiveFeedback et sont associés de telle sorte que lorsque la souris passe sur la cible de déplacement, l’utilisateur reçoit les commentaires les plus à jour sur la position de la souris.The DragOver and 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.

  • Si la valeur de DragAction est Drop, la valeur de l’effet de dépôt est retournée à la source. ainsi, l’application source peut effectuer l’opération appropriée sur les données sources ; par exemple, couper les données si l’opération était un déplacement.If the value of 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.

  • Si la valeur de DragAction est Cancel, l' DragLeave événement est déclenché.If the value of DragAction is Cancel, the DragLeave event is raised.

    Notes

    Les X propriétés Y et deDragEventArgs sont exprimées en coordonnées d’écran, et non en coordonnées clientes.The X and Y properties of the DragEventArgs are in screen coordinates, not client coordinates. La ligne de C# code suivante convertit les propriétés en client Point:The following line of C# code converts the properties to a client Point:

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

Pour plus d'informations sur la gestion des événements, voir gestion et déclenchement d’événements.For more information about handling events, see Handling and Raising Events.

S’applique à

Voir aussi