Control.QueryContinueDrag Händelse
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Inträffar under en dra och släpp-åtgärd och gör det möjligt för drakällan att avgöra om dra och släpp-åtgärden ska avbrytas.
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
Händelsetyp
Exempel
Det här kodutdraget QueryContinueDrag visar hur du använder händelsen för att avbryta dra och släpp-åtgärden om dragåtgärden flyttas utanför formulärets gränser. DoDragDrop Se metoden för det fullständiga kodexemplet.
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
Kommentarer
Händelsen QueryContinueDrag aktiveras när tangentbords- eller musknappstillståndet ändras under en drag-och-släpp-åtgärd. Händelsen QueryContinueDrag gör det möjligt för drakällan att avgöra om dra och släpp-åtgärden ska avbrytas.
Följande beskriver hur och när händelser relaterade till dra och släpp-åtgärder genereras.
Metoden DoDragDrop bestämmer kontrollen under den aktuella markörens plats. Den kontrollerar sedan om kontrollen är ett giltigt släppmål.
Om kontrollen är ett giltigt släppmål GiveFeedback aktiveras händelsen med dra och släpp-effekten angiven. En lista över dra och släpp-effekter finns i DragDropEffects uppräkningen.
Ändringar i musmarkörens position, tangentbordstillstånd och musknappstillstånd spåras.
Om användaren flyttar ut från ett fönster utlöses DragLeave händelsen.
Om musen går in i en annan kontroll, aktiveras för den DragEnter kontrollen.
Om musen flyttas men håller sig inom samma kontroll utlöses DragOver händelsen.
Om det sker en ändring i tangentbords- eller musknappens tillstånd QueryContinueDrag aktiveras händelsen och avgör om du vill fortsätta dra, släppa data eller avbryta åtgärden baserat på värdet Action för egenskapen för händelsens QueryContinueDragEventArgs.
Om värdet DragAction för är
ContinueDragOver genereras händelsen för att fortsätta åtgärden och GiveFeedback händelsen aktiveras med den nya effekten så att lämplig visuell feedback kan anges. En lista över giltiga släppeffekter finns i DragDropEffects uppräkningen.Note
Händelserna DragOver och GiveFeedback paras ihop så att när musen rör sig över släppmålet får användaren mest up-to-date feedback om musens position.
Om värdet DragAction för är
Dropreturneras drop-effektvärdet till källan, så att källprogrammet kan utföra lämplig åtgärd på källdata. Klipp till exempel ut data om åtgärden var en flytt.Om värdet DragAction för är
CancelDragLeave utlöses händelsen.
Som standard QueryContinueDrag anges Action händelsen till Cancel i DragAction om ESC-tangenten trycktes in och anges Action till Drop i DragAction om den vänstra, mellersta eller högra musknappen trycks in.
Mer information om hur du hanterar händelser finns i Hantera och höja händelser.