Control.DragEnter 事件
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
当对象被拖动到控件的边界时发生。
public:
event System::Windows::Forms::DragEventHandler ^ DragEnter;
public event System.Windows.Forms.DragEventHandler DragEnter;
public event System.Windows.Forms.DragEventHandler? DragEnter;
member this.DragEnter : System.Windows.Forms.DragEventHandler
Public Custom Event DragEnter As DragEventHandler
事件类型
示例
下面的代码示例演示两个 ListBox 控件之间的拖放操作。 该示例在拖动操作启动时调用 DoDragDrop 方法。 如果鼠标在 MouseDown 事件期间从鼠标位置移动了超过 SystemInformation.DragSize,则拖动操作将启动。
IndexFromPoint 方法用于确定在 MouseDown
事件期间要拖动的项的索引。
该示例还演示如何对拖放操作使用自定义游标。 该示例要求应用程序目录中分别存在两个游标文件(3dwarro.cur
和 3dwno.cur
),分别用于自定义拖放游标。 如果选中 UseCustomCursorsCheck
CheckBox,将使用自定义游标。 自定义游标在 GiveFeedback 事件处理程序中设置。
键盘状态在右侧 ListBox
的 DragOver 事件处理程序中计算,以确定拖动操作将基于 SHIFT、Ctrl、Alt 或 Ctrl+Alt 键的状态。 在 DragOver
事件期间,也会确定 ListBox
发生放置的位置。 如果要删除的数据不是 String
,则 DragEventArgs.Effect 设置为 DragDropEffects中的 None
。 最后,删除状态显示在 DropLocationLabel
Label中。
要删除的右 ListBox
的数据在 DragDrop 事件处理程序中确定,并在 ListBox
的适当位置添加 String
值。 如果拖动操作在窗体边界之外移动,则拖放操作在 QueryContinueDrag 事件处理程序中取消。
此代码摘录演示了如何使用 DragEnter 事件。 有关完整的代码示例,请参阅 DoDragDrop 方法。
void ListDragTarget_DragEnter( Object^ /*sender*/, System::Windows::Forms::DragEventArgs^ /*e*/ )
{
// Reset the label text.
DropLocationLabel->Text = "None";
}
private void ListDragTarget_DragEnter(object sender, DragEventArgs e)
{
// Reset the label text.
DropLocationLabel.Text = "None";
}
Private Sub ListDragTarget_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragEnter
' Reset the label text.
DropLocationLabel.Text = "None"
End Sub
注解
当用户在拖放操作期间首次将鼠标光标拖动到控件上时,将引发 DragEnter 事件。
注意
在低于 .NET Framework 2.0 的版本中,如果在 Windows 窗体上放置 DragEnter 和 DragDrop 事件的 UserControl,并在设计时将内容拖放到 UserControl 上,将引发 DropDrop
和 DropEnter
事件。 但是,关闭并重新打开解决方案时,不会再次引发 DragEnter 和 DragDrop 事件。
下面介绍了如何以及何时引发与拖放操作相关的事件。
DoDragDrop 方法确定当前光标位置下的控件。 然后检查控件是否为有效的删除目标。
如果控件是有效的放置目标,则会使用指定的拖放效果引发 GiveFeedback 事件。 有关拖放效果的列表,请参阅 DragDropEffects 枚举。
跟踪鼠标光标位置、键盘状态和鼠标按钮状态的更改。
如果键盘或鼠标按钮状态发生更改,则会引发 QueryContinueDrag 事件,并确定是继续拖动、删除数据,还是根据事件 QueryContinueDragEventArgsAction 属性的值取消操作。
如果 DragAction 的值
Continue
,则会引发 DragOver 事件以继续操作,并引发具有新效果的 GiveFeedback 事件,以便可以设置适当的视觉反馈。 有关有效删除效果的列表,请参阅 DragDropEffects 枚举。注意
将 DragOver 和 GiveFeedback 事件配对,以便在鼠标在放置目标之间移动时,系统会向用户提供鼠标位置的 up-to日期反馈。
如果 DragAction 的值
Drop
,则下降效果值将返回到源,以便源应用程序可以对源数据执行适当的操作;例如,如果操作是移动,则剪切数据。如果 DragAction 的值
Cancel
,则会引发 DragLeave 事件。注意
DragEventArgs 的 X 和 Y 属性位于屏幕坐标中,而不是客户端坐标。 以下 Visual C# 代码行将属性转换为客户端 Point。
Point clientPoint = targetControl.PointToClient(new Point(de.X, de.Y));
有关处理事件的详细信息,请参阅 处理和引发事件。