Control.QueryContinueDrag 事件
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在拖放操作期间发生,并且允许拖动源确定是否应取消拖放操作。
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 枚举。
跟踪鼠标光标位置、键盘状态和鼠标按钮状态的更改。
如果键盘或鼠标按钮状态发生更改,则会QueryContinueDrag引发 事件,并根据事件的 QueryContinueDragEventArgs的 属性的值Action确定是继续拖动、删除数据还是取消操作。
如果 的DragAction
Continue
值为 ,则会DragOver引发 事件以继续操作,并使用GiveFeedback新效果引发 事件,以便设置适当的视觉反馈。 有关有效放置效果的列表,请参见 DragDropEffects 枚举。注意
DragOver和 GiveFeedback 事件配对,以便当鼠标在放置目标上移动时,用户将获得有关鼠标位置的最新反馈。
如果 的DragAction
Drop
值为 ,则删除效果值将返回到源,因此源应用程序可以对源数据执行相应的操作;例如,如果操作是移动,则剪切数据。如果 的DragAction
Cancel
值为 ,则DragLeave引发 事件。
默认情况下,如果按下了 ESC 键,事件QueryContinueDrag会将 设置为 Cancel
Action inDragAction,如果按下了鼠标左键、中间键或右键,则事件将 设置为 ActionDrop
inDragAction。
有关处理事件的详细信息,请参阅 处理和引发事件。