QueryContinueDragEventHandler Delegat
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje metodę, która będzie obsługiwać zdarzenie QueryContinueDragControl.
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)
Parametry
- sender
- Object
Źródło zdarzenia.
QueryContinueDragEventArgs, który zawiera dane zdarzenia.
Przykłady
W poniższym przykładzie pokazano operację przeciągania i upuszczania między dwoma kontrolkami ListBox. Przykład wywołuje metodę DoDragDrop po uruchomieniu akcji przeciągania. Akcja przeciągania rozpoczyna się, jeśli mysz przeniosła się więcej niż SystemInformation.DragSize z lokalizacji myszy podczas zdarzenia MouseDown. Metoda IndexFromPoint służy do określania indeksu elementu do przeciągania podczas zdarzenia MouseDown
.
W przykładzie pokazano również użycie niestandardowych kursorów dla operacji przeciągania i upuszczania. W przykładzie przyjęto założenie, że dwa pliki kursorów, 3dwarro.cur
i 3dwno.cur
, istnieją w katalogu aplikacji, odpowiednio dla niestandardowego przeciągania i bez upuszczania kursorów. Kursory niestandardowe będą używane, jeśli zaznaczono UseCustomCursorsCheck
CheckBox. Kursory niestandardowe są ustawiane w procedurze obsługi zdarzeń GiveFeedback.
Stan klawiatury jest obliczany w procedurze obsługi zdarzeń DragOver dla prawego ListBox
, aby określić, jaka operacja przeciągania będzie oparta na stanie SHIFT, CTRL, ALT lub CTRL+ALT. Lokalizacja w ListBox
, w której występuje spadek, jest również określana podczas zdarzenia DragOver
. Jeśli dane do porzucenia nie są String
, DragEventArgs.Effect jest ustawiona na wartość DragDropEffects.None. Na koniec stan upuszczania jest wyświetlany w DropLocationLabel
Label.
Dane do upuszczania odpowiedniego ListBox
są określane w procedurze obsługi zdarzeń DragDrop, a wartość String
jest dodawana w odpowiednim miejscu w ListBox
. Jeśli operacja przeciągania przesuwa się poza granice formularza, operacja przeciągania i upuszczania zostanie anulowana w programie obsługi zdarzeń QueryContinueDrag.
Ten fragment kodu przedstawia użycie delegata QueryContinueDragEventHandler ze zdarzeniem QueryContinueDrag. Zobacz metodę DoDragDrop, aby zapoznać się z kompletnym przykładem kodu.
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
Uwagi
Podczas tworzenia delegata QueryContinueDragEventHandler należy zidentyfikować metodę, która będzie obsługiwać zdarzenie. Aby skojarzyć zdarzenie z procedurą obsługi zdarzeń, dodaj wystąpienie delegata do zdarzenia. Procedura obsługi zdarzeń jest wywoływana za każdym razem, gdy wystąpi zdarzenie, chyba że usuniesz delegata. Aby uzyskać więcej informacji na temat obsługi zdarzeń za pomocą delegatów, zobacz Obsługa i podnoszenie zdarzeń.
Metody rozszerzania
GetMethodInfo(Delegate) |
Pobiera obiekt reprezentujący metodę reprezentowaną przez określonego delegata. |