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 设置。

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

要在右侧 ListBox 删除的数据在事件处理程序中 DragDrop 确定, String 并将值添加到 中的 ListBox适当位置。 如果拖动操作移动到窗体边界之外,则会在事件处理程序中 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 窗体上放置了 一个UserControl带有 DragEnterDragDrop 事件的 ,并在设计时将某些内容拖放到 上UserControlDropDrop则会引发 和 DropEnter 事件。 但是,关闭并重新打开解决方案时, DragEnter 不会再次引发 和 DragDrop 事件。

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

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

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

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

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

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

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

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

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

    注意

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

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

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

    注意

    XDragEventArgsY 属性采用屏幕坐标,而不是客户端坐标。 以下 Visual C# 代码行将属性转换为客户端 Point

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

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

适用于

另请参阅