Control.QueryContinueDrag 事件

定义

在拖放操作期间发生,并且允许拖动源确定是否应取消拖放操作。

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 

事件类型

示例

此代码摘录演示了在拖动操作移出窗体边界时使用 QueryContinueDrag 事件取消拖放操作。 有关完整的代码示例, DoDragDrop 请参阅 方法。

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

注解

QueryContinueDrag 拖放操作期间键盘或鼠标按钮状态发生更改时,将引发 事件。 事件 QueryContinueDrag 使拖动源能够确定是否应取消拖放操作。

下面描述与拖放操作相关的事件的引发方式以及引发时间。

方法 DoDragDrop 确定当前光标位置下的控件。 然后,它会检查控件是否是有效的放置目标。

如果控件是有效的放置目标,则会 GiveFeedback 使用指定的拖放效果引发 事件。 有关拖放效果的列表,请参见 DragDropEffects 枚举。

跟踪鼠标光标位置、键盘状态和鼠标按钮状态的更改。

  • 如果用户移出一个窗口,则引发 DragLeave 事件。

  • 如果鼠标进入另一个控件,则引发该控件的 DragEnter

  • 如果鼠标移动但停留在同一个控件中,则引发 DragOver 事件。

如果键盘或鼠标按钮状态发生更改,则会QueryContinueDrag引发 事件,并根据事件的 QueryContinueDragEventArgs的 属性的值Action确定是继续拖动、删除数据还是取消操作。

  • 如果 的DragActionContinue值为 ,则会DragOver引发 事件以继续操作,并使用GiveFeedback新效果引发 事件,以便设置适当的视觉反馈。 有关有效放置效果的列表,请参见 DragDropEffects 枚举。

    注意

    DragOverGiveFeedback 事件配对,以便当鼠标在放置目标上移动时,用户将获得有关鼠标位置的最新反馈。

  • 如果 的DragActionDrop值为 ,则删除效果值将返回到源,因此源应用程序可以对源数据执行相应的操作;例如,如果操作是移动,则剪切数据。

  • 如果 的DragActionCancel值为 ,则DragLeave引发 事件。

默认情况下,如果按下了 ESC 键,事件QueryContinueDrag会将 设置为 CancelAction inDragAction,如果按下了鼠标左键、中间键或右键,则事件将 设置为 ActionDrop inDragAction

有关处理事件的详细信息,请参阅 处理和引发事件

适用于

另请参阅