Winform中实现拖动
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
开始,确定所要拖动的数据,并且启用数据收集功能,用DoDrapDrop完成,此方法由Control类定义。在拖动之前收集数据内容。
格式:public DragDropEffects DoragDrop(object data,DragDropEffects allowedEffects)data:为用户所要拖动的数据内容,allowedEffects参数指定拖动效果:
成员名称 说明
None 放置目标不接受该数据。
Copy 将拖动源中的数据复制到放置目标。
Move 将拖动源的数据移动到放置目标。
Link 将拖动源中的数据链接到放置目标。
Scroll 拖动时可以滚动目标,以定位在目标中当前不可见的某个放置位置。
All Copy、Link、Move 和 Scroll 效果的组合。
启用数据收集的相关代码,必须放在开始执行拖动操作的事件里,最普遍的放在MouseDown事件。
取得数据后,便是把数据拖动到目标处 :事件DragEnter和DragDrop。DragEnter事件当拖动的数据进入目标时触发,在这个事件中必须编写数据被放置时所要完成的效果,必须为上面DragDropEffects枚举成员之一。
事件定义:public event DragEventHandler DragEnter 这个事件是通过委派用来处理控件的DragDrop, DragEnter 或DragOver等拖放操作的相方法。
委派定义:public delegate void DragEventHandler(object sender,DragEventArgs e)
//后台代码生成DragEventHandler
// this.txtTarget.DragDrop += new System.Windows.Forms.DragEventHandler(this.txtTarget_DragDrop)
// this.txtTarget.DragEnter += new System.Windows.Forms.DragEventHandler(this.txtTarget_DragEnter);
AllowedEffects 获取 DragDropEffects 枚举的成员,它指定拖动事件的发起方允许哪些操作。
Data 获取一个数据对象,该对象包含与对应拖动事件关联的数据。
Effects 获取或设置目标拖放操作。
Handled 获取或设置一个值,该值指示路由事件在路由过程中的事件处理当前状态。 (继承自 RoutedEventArgs。)
KeyStates 获取一个标志枚举,指示 Shift、Ctrl 和 Alt 键的当前状态以及鼠标按钮的状态。
OriginalSource 在父类进行任何可能的 Source 调整之前,获取原始报告源(由纯粹命中测试确定)。 (继承自 RoutedEventArgs。)
RoutedEvent 获取或设置与此 RoutedEventArgs 实例关联的 RoutedEvent。 (继承自 RoutedEventArgs。)
Source 获取或设置对引发事件的对象的引用。 (继承自 RoutedEventArgs。)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
/// <summary>
/// 开始拖放操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtSource_MouseDown(object sender, MouseEventArgs e)
{
txtSource.DoDragDrop(txtSource.Text, DragDropEffects.Copy | DragDropEffects.Link);
}
/// <summary>
/// 用鼠标将某项拖到该控件工作区时发生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtTarget_DragEnter(object sender, DragEventArgs e)
{
//指定拖放的效果
e.Effect = DragDropEffects.Copy;
}
/// <summary>
/// 拖放完成时发生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtTarget_DragDrop(object sender, DragEventArgs e)
{
//获取包含此事件关联的数据
txtTarget .Text =e.Data .GetData ((DataFormats .Text )).ToString ();
}