Freigeben über


Control.QueryContinueDrag-Ereignis

Tritt während eines Drag & Drop-Vorgangs ein. Dadurch kann die Quelle des Ziehvorgangs bestimmen, ob der Drag & Drop-Vorgang abgebrochen werden soll.

Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

Syntax

'Declaration
Public Event QueryContinueDrag As QueryContinueDragEventHandler
'Usage
Dim instance As Control
Dim handler As QueryContinueDragEventHandler

AddHandler instance.QueryContinueDrag, handler
public event QueryContinueDragEventHandler QueryContinueDrag
public:
event QueryContinueDragEventHandler^ QueryContinueDrag {
    void add (QueryContinueDragEventHandler^ value);
    void remove (QueryContinueDragEventHandler^ value);
}
/** @event */
public void add_QueryContinueDrag (QueryContinueDragEventHandler value)

/** @event */
public void remove_QueryContinueDrag (QueryContinueDragEventHandler value)
JScript unterstützt die Verwendung von Ereignissen, aber nicht die Deklaration von neuen Ereignissen.

Hinweise

Das QueryContinueDrag-Ereignis wird ausgelöst, wenn während eines Drag & Drop-Vorgangs eine Änderung des Tastatur- oder Maustastenzustands auftritt. Mit dem QueryContinueDrag-Ereignis kann die Quelle des Ziehvorgangs bestimmen, ob der Drag & Drop-Vorgang abgebrochen werden soll.

Nachfolgend wird beschrieben, wie und wann Ereignisse für Drag & Drop-Vorgänge ausgelöst werden.

Die DoDragDrop-Methode bestimmt das Steuerelement an der aktuellen Cursorposition. Anschließend überprüft sie, ob es sich bei diesem Steuerelement um ein gültiges Ablageziel handelt.

Wenn es sich bei dem Steuerelement um ein gültiges Ablageziel handelt, wird das GiveFeedback-Ereignis mit dem angegebenen Drag & Drop-Effekt ausgelöst. Eine Liste der Drag & Drop-Effekte finden Sie unter der DragDropEffects-Enumeration.

Änderungen der Mauszeigerposition, des Tastaturzustands und des Zustands der Maustasten werden nachverfolgt.

  • Wenn die Benutzeraktion das Fenster verlässt, wird das DragLeave-Ereignis ausgelöst.

  • Wenn der Mauszeiger in ein anderes Steuerelement bewegt wird, wird DragEnter für dieses Steuerelement ausgelöst.

  • Wenn die Maus bewegt wird, ohne das Steuerelement zu verlassen, wird das DragOver-Ereignis ausgelöst.

Wenn der Tastatur- oder Maustastenzustand geändert wird, wird das QueryContinueDrag-Ereignis ausgelöst, das entsprechend dem Wert der Action-Eigenschaft von QueryContinueDragEventArgs des Ereignisses bestimmt, ob der Ziehvorgang fortgesetzt, die Daten abgelegt oder der Vorgang abgebrochen werden soll.

  • Wenn der Wert von DragActionContinue ist, wird das DragOver-Ereignis ausgelöst, um den Vorgang fortzusetzen. Außerdem wird das GiveFeedback-Ereignis ausgelöst, damit eine entsprechende visuelle Rückmeldung festgelegt werden kann. Eine Liste der gültigen Ablageeffekte finden Sie unter der DragDropEffects-Enumeration.

    Hinweis

    Das DragOver-Ereignis und das GiveFeedback-Ereignis werden zusammengefasst, damit Benutzer beim Bewegen der Maus über das Ablageziel eine aktuelle Rückmeldung von der Mausposition erhalten.

  • Wenn der Wert von DragActionDrop ist, wird der Wert des Ablageeffekts an die Quelle zurückgegeben. Die Quellanwendung kann dadurch den entsprechenden Vorgang für die Quelldaten ausführen, z. B. die Daten ausschneiden, wenn es sich um einen Verschiebevorgang handelt.

  • Wenn der Wert von DragActionCancel ist, wird das DragLeave-Ereignis ausgelöst.

Standardmäßig legt das QueryContinueDrag-Ereignis Action auf Cancel in DragAction fest, wenn ESC gedrückt wurde. Außerdem wird Action auf Drop in DragAction festgelegt, wenn die linke, mittlere oder rechte Maustaste gedrückt wurde.

Weitere Informationen zum Behandeln von Ereignissen finden Sie unter Behandeln von Ereignissen.

Beispiel

Im folgenden Beispiel wird ein Drag & Drop-Vorgang zwischen zwei ListBox-Steuerelementen veranschaulicht. In diesem Beispiel wird die DoDragDrop-Methode aufgerufen, wenn der Ziehvorgang begonnen wird. Der Ziehvorgang beginnt, wenn die Maus um mehr als SystemInformation.DragSize von der Mausposition während des MouseDown-Ereignisses verschoben wurde. Mit der IndexFromPoint-Methode kann der Index des im MouseDown-Ereignis zu ziehenden Elements bestimmt werden.

Im Beispiel wird außerdem die Verwendung eines benutzerdefinierten Cursors bei einem Drag & Drop-Vorgang veranschaulicht. Bei diesem Beispiel müssen die beiden Cursordateien 3dwarro.cur und 3dwno.cur für den benutzerdefinierten Ziehcursor bzw. den Cursor, der angezeigt wird, wenn ein Ablegen nicht möglich ist, im Anwendungsverzeichnis vorhanden sein. Ein benutzerdefinierter Cursor wird verwendet, wenn die UseCustomCursorsCheckCheckBox aktiviert wurde. Ein benutzerdefinierter Cursor wird im GiveFeedback-Ereignishandler festgelegt.

Der Tastaturzustand wird vom DragOver-Ereignishandler für die rechte ListBox ausgewertet, um je nach Zustand der UMSCHALTTASTE oder von STRG, ALT bzw. STRG+ALT den auszuführenden Ziehvorgang zu ermitteln. Außerdem wird beim DragOver-Ereignis auch die Position in der ListBox bestimmt, für die der Ablegevorgang ausgeführt wird. Wenn die abzulegenden Daten kein String sind, wird DragEventArgs.Effect in DragDropEffects auf None festgelegt. Abschließend wird der Status des Ablegevorgangs im DropLocationLabelLabel angezeigt.

Die in der rechten ListBox abzulegenden Daten werden im DragDrop-Ereignishandler bestimmt. Der String-Wert wird an der entsprechenden Stelle in die ListBox eingefügt. Wenn der Ziehvorgang außerhalb der Grenzen des Formulars beendet wird, wird der Drag & Drop-Vorgang im QueryContinueDrag-Ereignishandler abgebrochen.

In diesem Codeauszug wird die Verwendung des QueryContinueDrag-Ereignisses veranschaulicht. Das vollständige Codebeispiel finden Sie unter der DoDragDrop-Methode.

Private Sub ListDragSource_QueryContinueDrag(ByVal sender As Object, ByVal e As QueryContinueDragEventArgs) Handles ListDragSource.QueryContinueDrag
    ' Cancel the drag if the mouse moves off the form.
    Dim lb as ListBox = CType(sender, System.Windows.Forms.ListBox)

    If Not (lb is nothing) Then

        Dim f as Form = lb.FindForm()

        ' Cancel the drag if the mouse moves off the form. The screenOffset
        ' takes into account any desktop bands that may be at the top or left
        ' side of the screen.
        If (((Control.MousePosition.X - screenOffset.X) < f.DesktopBounds.Left) Or _
            ((Control.MousePosition.X - screenOffset.X) > f.DesktopBounds.Right) Or _
            ((Control.MousePosition.Y - screenOffset.Y) < f.DesktopBounds.Top) Or _
            ((Control.MousePosition.Y - screenOffset.Y) > f.DesktopBounds.Bottom)) Then

            e.Action = DragAction.Cancel
        End If
    End if
End Sub
private void ListDragSource_QueryContinueDrag(object sender, System.Windows.Forms.QueryContinueDragEventArgs e) {
    // Cancel the drag if the mouse moves off the form.
    ListBox lb = sender as ListBox;

    if (lb != null) {

        Form f = lb.FindForm();

        // Cancel the drag if the mouse moves off the form. The screenOffset
        // takes into account any desktop bands that may be at the top or left
        // side of the screen.
        if (((Control.MousePosition.X - screenOffset.X) < f.DesktopBounds.Left) ||
            ((Control.MousePosition.X - screenOffset.X) > f.DesktopBounds.Right) ||
            ((Control.MousePosition.Y - screenOffset.Y) < f.DesktopBounds.Top) ||
            ((Control.MousePosition.Y - screenOffset.Y) > f.DesktopBounds.Bottom)) {

            e.Action = DragAction.Cancel;
        }
    }
}
void ListDragSource_QueryContinueDrag( Object^ sender, System::Windows::Forms::QueryContinueDragEventArgs^ e )
{
   // Cancel the drag if the mouse moves off the form.
   ListBox^ lb = dynamic_cast<ListBox^>(sender);
   if ( lb != nullptr )
   {
      Form^ f = lb->FindForm();

      // Cancel the drag if the mouse moves off the form. The screenOffset
      // takes into account any desktop bands that may be at the top or left
      // side of the screen.
      if ( ((Control::MousePosition.X - screenOffset.X) < f->DesktopBounds.Left) || ((Control::MousePosition.X - screenOffset.X) > f->DesktopBounds.Right) || ((Control::MousePosition.Y - screenOffset.Y) < f->DesktopBounds.Top) || ((Control::MousePosition.Y - screenOffset.Y) > f->DesktopBounds.Bottom) )
      {
         e->Action = DragAction::Cancel;
      }
   }
}
private void listDragSource_QueryContinueDrag(Object sender, 
    System.Windows.Forms.QueryContinueDragEventArgs e)
{
    // Cancel the drag if the mouse moves off the form.
    ListBox lb = (ListBox)sender;

    if (lb != null) {
        Form f = lb.FindForm();
        // Cancel the drag if the mouse moves off the form. The 
        // screenOffset takes into account any desktop bands 
        // that may be at the top or left side of the screen.
        if (Control.get_MousePosition().get_X() - screenOffset.get_X() 
            < f.get_DesktopBounds().get_Left() 
            || Control.get_MousePosition().get_X() 
            - screenOffset.get_X() > f.get_DesktopBounds().get_Right() 
            || Control.get_MousePosition().get_Y() - screenOffset.get_Y() 
            < f.get_DesktopBounds().get_Top() 
            || Control.get_MousePosition().get_Y() - screenOffset.get_Y() 
            > f.get_DesktopBounds().get_Bottom()) {
            e.set_Action(DragAction.Cancel);
        }
    }
} //listDragSource_QueryContinueDrag

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

Control-Klasse
Control-Member
System.Windows.Forms-Namespace
OnQueryContinueDrag