Control.DragEnter 事件

定义

当对象被拖动到控件的边界时发生。

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.cur3dwno.cur),分别用于自定义拖放游标。 如果选中 UseCustomCursorsCheckCheckBox,将使用自定义游标。 自定义游标在 GiveFeedback 事件处理程序中设置。

键盘状态在右侧 ListBoxDragOver 事件处理程序中计算,以确定拖动操作将基于 SHIFT、Ctrl、Alt 或 Ctrl+Alt 键的状态。 在 DragOver 事件期间,也会确定 ListBox 发生放置的位置。 如果要删除的数据不是 String,则 DragEventArgs.Effect 设置为 DragDropEffects中的 None。 最后,删除状态显示在 DropLocationLabelLabel中。

要删除的右 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 窗体上放置 DragEnterDragDrop 事件的 UserControl,并在设计时将内容拖放到 UserControl 上,将引发 DropDropDropEnter 事件。 但是,关闭并重新打开解决方案时,不会再次引发 DragEnterDragDrop 事件。

下面介绍了如何以及何时引发与拖放操作相关的事件。

DoDragDrop 方法确定当前光标位置下的控件。 然后检查控件是否为有效的删除目标。

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

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

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

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

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

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

  • 如果 DragAction 的值 Continue,则会引发 DragOver 事件以继续操作,并引发具有新效果的 GiveFeedback 事件,以便可以设置适当的视觉反馈。 有关有效删除效果的列表,请参阅 DragDropEffects 枚举。

    注意

    DragOverGiveFeedback 事件配对,以便在鼠标在放置目标之间移动时,系统会向用户提供鼠标位置的 up-to日期反馈。

  • 如果 DragAction 的值 Drop,则下降效果值将返回到源,以便源应用程序可以对源数据执行适当的操作;例如,如果操作是移动,则剪切数据。

  • 如果 DragAction 的值 Cancel,则会引发 DragLeave 事件。

    注意

    DragEventArgsXY 属性位于屏幕坐标中,而不是客户端坐标。 以下 Visual C# 代码行将属性转换为客户端 Point

    Point clientPoint = targetControl.PointToClient(new Point(de.X, de.Y));
    

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

适用于

另请参阅