拖放鼠标行为概述(Windows 窗体 .NET)
Windows 窗体包含一组实现拖放行为的方法、事件和类。 本主题概述了 Windows 窗体对拖放功能的支持。
拖放事件
拖放操作中有两类事件:一类是拖放操作的当前目标上发生的事件,一类是拖放操作的源上发生的事件。 若要执行拖放操作,必须处理这些事件。 通过使用这些事件的事件参数中的可用信息,可以轻松地实现拖放操作。
当前拖放目标上的事件
下表显示在拖放操作的当前目标上发生的事件。
鼠标事件 | 说明 |
---|---|
DragEnter | 将对象拖入控件的边界时此事件发生。 此事件的处理程序接收类型为 DragEventArgs 的参数。 |
DragOver | 在鼠标指针位于控件的边界内时如果拖动对象则此事件发生。 此事件的处理程序接收类型为 DragEventArgs 的参数。 |
DragDrop | 拖放操作完成时此事件发生。 此事件的处理程序接收类型为 DragEventArgs 的参数。 |
DragLeave | 将对象拖出控件的边界时此事件发生。 此事件的处理程序接收类型为 EventArgs 的参数。 |
DragEventArgs 类提供鼠标指针的位置、鼠标按钮和键盘修改键的当前状态、正在拖动的数据以及 DragDropEffects 值(指定拖动事件的源所允许的操作以及操作的目标放置效果)。
放置源上的事件
下表显示在拖放操作的源上发生的事件。
鼠标事件 | 说明 |
---|---|
GiveFeedback | 此事件在执行拖动操作期间发生。 借助此事件,可向用户提供可视提示(例如更改鼠标指针),通知拖放操作正在发生。 此事件的处理程序接收类型为 GiveFeedbackEventArgs 的参数。 |
QueryContinueDrag | 此事件在拖放操作期间引发,并使拖动源可以确定是否应取消拖放操作。 此事件的处理程序接收类型为 QueryContinueDragEventArgs 的参数。 |
QueryContinueDragEventArgs 类提供鼠标按钮和键盘修改键的当前状态、指定是否按 ESC 键的值以及 DragAction 值(可设置为指定是否应继续拖放操作)。
执行拖放操作
拖放操作始终涉及两个组件 - 放置源和拖放目标。 若要启动拖放操作,请指定一个控件作为源,并处理 MouseDown 事件。 在事件处理程序中,调用 DoDragDrop 方法,该方法提供与放置关联的数据和 DragDropEffects 值。
将目标控件的 AllowDrop 属性设置为 true
,以允许该控件接受拖放操作。 目标处理两个事件,第一个是响应控件上的拖动的事件,如 DragOver。 第二个事件是放置操作本身 - DragDrop。
下面的示例演示一个从 Label 控件到 TextBox 的拖动操作。 拖动操作完成后,TextBox
通过将标签的文本分配给其自身来做出响应。
// Initiate the drag
private void label1_MouseDown(object sender, MouseEventArgs e) =>
DoDragDrop(((Label)sender).Text, DragDropEffects.All);
// Set the effect filter and allow the drop on this control
private void textBox1_DragOver(object sender, DragEventArgs e) =>
e.Effect = DragDropEffects.All;
// React to the drop on this control
private void textBox1_DragDrop(object sender, DragEventArgs e) =>
textBox1.Text = (string)e.Data.GetData(typeof(string));
' Initiate the drag
Private Sub Label1_MouseDown(sender As Object, e As MouseEventArgs)
DoDragDrop(DirectCast(sender, Label).Text, DragDropEffects.All)
End Sub
' Set the effect filter and allow the drop on this control
Private Sub TextBox1_DragOver(sender As Object, e As DragEventArgs)
e.Effect = DragDropEffects.All
End Sub
' React to the drop on this control
Private Sub TextBox1_DragDrop(sender As Object, e As DragEventArgs)
TextBox1.Text = e.Data.GetData(GetType(String))
End Sub
有关拖动效果的详细信息,请参阅Data 和 AllowedEffect。