QueryContinueDragEventHandler Delegat
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt die Methode zur Behandlung des QueryContinueDrag-Ereignisses eines Control-Objekts dar.
public delegate void QueryContinueDragEventHandler(System::Object ^ sender, QueryContinueDragEventArgs ^ e);
public delegate void QueryContinueDragEventHandler(object sender, QueryContinueDragEventArgs e);
public delegate void QueryContinueDragEventHandler(object? sender, QueryContinueDragEventArgs e);
type QueryContinueDragEventHandler = delegate of obj * QueryContinueDragEventArgs -> unit
Public Delegate Sub QueryContinueDragEventHandler(sender As Object, e As QueryContinueDragEventArgs)
Parameter
- sender
- Object
Die Quelle eines Ereignisses.
Ein QueryContinueDragEventArgs, das die Ereignisdaten enthält.
Beispiele
Im folgenden Beispiel wird ein Drag-and-Drop-Vorgang zwischen zwei ListBox Steuerelementen veranschaulicht. Im Beispiel wird die DoDragDrop -Methode aufgerufen, wenn die Ziehaktion gestartet wird. Die Ziehaktion wird gestartet, wenn sich die Maus während MouseDown des Ereignisses mehr als SystemInformation.DragSize von der Mausposition bewegt hat. Die IndexFromPoint -Methode wird verwendet, um den Index des Elements zu bestimmen, das während des Ereignisses MouseDown
gezogen werden soll.
Das Beispiel veranschaulicht auch die Verwendung benutzerdefinierter Cursor für den Drag-and-Drop-Vorgang. Im Beispiel wird davon ausgegangen, 3dwarro.cur
dass zwei Cursordateien und 3dwno.cur
im Anwendungsverzeichnis für die benutzerdefinierten Cursor zum Ziehen bzw. Nicht-Ablegen vorhanden sind. Die benutzerdefinierten Cursor werden verwendet, wenn der UseCustomCursorsCheck
CheckBox aktiviert ist. Die benutzerdefinierten Cursor werden im GiveFeedback Ereignishandler festgelegt.
Der Tastaturzustand wird im Ereignishandler für die DragOver richtige ListBox
ausgewertet, um zu bestimmen, welcher Ziehvorgang auf Grundlage des Zustands der UMSCHALT-, STRG-, ALT- oder STRG+ALT-TASTEN erfolgt. Der Speicherort in dem, an dem ListBox
der Abbruch erfolgen würde, wird auch während des Ereignisses DragOver
bestimmt. Wenn die zu löschenden Daten keine String
sind, ist auf DragEventArgs.Effect festgelegt DragDropEffects.None. Schließlich wird der status des Drops in DropLocationLabel
Labelangezeigt.
Die Daten, die für die Rechte ListBox
gelöscht werden sollen, werden im DragDrop Ereignishandler bestimmt, und der String
Wert wird an der entsprechenden Stelle in hinzugefügt ListBox
. Wenn sich der Ziehvorgang außerhalb der Grenzen des Formulars bewegt, wird der Drag-and-Drop-Vorgang im QueryContinueDrag Ereignishandler abgebrochen.
In diesem Codeausschnitt wird die Verwendung des QueryContinueDragEventHandler Delegaten mit dem QueryContinueDrag Ereignis veranschaulicht. Das vollständige Codebeispiel finden Sie in der DoDragDrop -Methode.
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, 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;
}
}
}
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, ListBox)
If (lb IsNot 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
Hinweise
Beim Erstellen eines QueryContinueDragEventHandler-Delegaten bestimmen Sie die Methode für die Ereignisbehandlung. Um dem Ereignishandler das Ereignis zuzuordnen, fügen Sie dem Ereignis eine Instanz des Delegaten hinzu. Der Ereignishandler wird bei jedem Eintreten des Ereignisses aufgerufen, sofern der Delegat nicht entfernt wird. Weitere Informationen zum Behandeln von Ereignissen mit Delegaten finden Sie unter Behandeln und Auslösen von Ereignissen.
Erweiterungsmethoden
GetMethodInfo(Delegate) |
Ruft ein Objekt ab, das die Methode darstellt, die vom angegebenen Delegaten dargestellt wird. |
Gilt für:
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für