Control.QueryContinueDrag Zdarzenie
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.
Występuje podczas operacji przeciągania i upuszczania i umożliwia źródło przeciągania w celu określenia, czy operacja przeciągania i upuszczania powinna zostać anulowana.
public:
event System::Windows::Forms::QueryContinueDragEventHandler ^ QueryContinueDrag;
public event System.Windows.Forms.QueryContinueDragEventHandler QueryContinueDrag;
public event System.Windows.Forms.QueryContinueDragEventHandler? QueryContinueDrag;
member this.QueryContinueDrag : System.Windows.Forms.QueryContinueDragEventHandler
Public Custom Event QueryContinueDrag As QueryContinueDragEventHandler
Typ zdarzenia
Przykłady
Ten fragment kodu przedstawia użycie QueryContinueDrag zdarzenia w celu anulowania operacji przeciągania i upuszczania, jeśli operacja przeciągania przesuwa się poza granice formularza. Zobacz metodę DoDragDrop kompletnego przykładu 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
Zdarzenie QueryContinueDrag jest wywoływane w przypadku zmiany stanu klawiatury lub przycisku myszy podczas operacji przeciągania i upuszczania. Zdarzenie QueryContinueDrag umożliwia źródło przeciągania w celu określenia, czy operacja przeciągania i upuszczania powinna zostać anulowana.
Poniżej opisano, jak i kiedy są wywoływane zdarzenia związane z operacjami przeciągania i upuszczania.
Metoda DoDragDrop określa kontrolkę pod bieżącą lokalizacją kursora. Następnie sprawdza, czy kontrolka jest prawidłowym elementem docelowym upuszczania.
Jeśli kontrolka jest prawidłowym elementem docelowym upuszczania, GiveFeedback zdarzenie jest wywoływane z określonym efektem przeciągania i upuszczania. Aby uzyskać listę efektów przeciągania i upuszczania, zobacz DragDropEffects wyliczenie.
Śledzone są zmiany położenia kursora myszy, stanu klawiatury i stanu przycisku myszy.
Jeśli użytkownik wyjecha z okna, DragLeave zdarzenie zostanie zgłoszone.
Jeśli mysz wejdzie w inną kontrolkę, zostanie podniesiona kontrolka DragEnter dla tej kontrolki.
Jeśli mysz porusza się, ale pozostaje w tej samej kontrolce, DragOver zdarzenie zostanie podniesione.
W przypadku zmiany stanu klawiatury lub przycisku myszy zdarzenie jest wywoływane i określa, QueryContinueDrag czy kontynuować przeciąganie, upuszczać dane, czy anulować operację na podstawie wartości Action właściwości zdarzenia QueryContinueDragEventArgs.
Jeśli wartość DragAction to
Continue, DragOver zdarzenie jest zgłaszane, aby kontynuować operację, a GiveFeedback zdarzenie jest wywoływane z nowym efektem, dzięki czemu można ustawić odpowiednią opinię wizualną. Aby uzyskać listę prawidłowych efektów upuszczania, zobacz DragDropEffects wyliczenie.Uwaga / Notatka
Zdarzenia DragOver i GiveFeedback są sparowane tak, aby w miarę poruszania się myszą przez obiekt docelowy upuszczania, użytkownik otrzymuje najbardziej up-to-date feedback na pozycji myszy.
Jeśli wartość DragAction to
Drop, wartość efektu upuszczania jest zwracana do źródła, więc aplikacja źródłowa może wykonać odpowiednią operację na danych źródłowych, na przykład wyciąć dane, jeśli operacja została przeniesiona.Jeśli wartość DragAction to
Cancel, zdarzenie DragLeave jest zgłaszane.
Domyślnie QueryContinueDrag zdarzenie jest ustawiane Action na Cancel wartość , DragAction jeśli klawisz ESC został naciśnięty i ustawia Action wartość Drop w DragAction przypadku naciśnięcia lewego, środkowego lub prawego przycisku myszy.
Aby uzyskać więcej informacji na temat obsługi zdarzeń, zobacz Obsługa i wywoływanie zdarzeń.