拖放操作

拖放操作是如何运作的

拖放操作其实与剪切与粘贴(或复制与粘贴)没有什么不同,只不过它是使用鼠标而不是使用键盘。在这两类操作中,您都会拥有一个来源(也就是您剪切或复制的对象)以及一个目标(也就是您所粘贴之处)。不论是哪一种操作,在操作期间,都会在内存中存在数据的一份副本。剪切与粘贴会使用到剪贴板,而拖放则会使用到一个DataObject对象,其实DataObject对象就好比是一个私有剪贴板。

在一个典型的拖放操作中,将会依序引发下列事件:

1.您可以通过调用源控件的DoDragDrop方法来初始化拖曳操作。DoDragDrop方法的语法如下所示:

DragDropEffects DoDragDrop(

Object data,

DragDropEffects allowedEffects)DoDragDrop方法会接受下列两个参数:

data参数用来指定所要拖曳(传递)的数据。 allowedEffects参数用来指定哪些操作(“复制”和/或“移动”)是被允许的。

一个新的DataObject对象会自动被创建。

2.接下来会引发源控件的GiveFeedback事件。在大多数的情况下,您并不需要去处理GiveFeedback事件,但是如果您想在拖曳期间显示一个自定义的鼠标指针,则可以在GiveFeedback事件处理函数中编写程序代码来完成此项设定。

3.AllowDrop属性被设定成True的任何控件都可以是置放目标。您可以在设计阶段在“属性”窗口中将要作为目标控件的AllowDrop属性设定成True,或者是于运行阶段在窗体的Load事件处理函数中将要作为目标控件的AllowDrop属性设定成True。

4.当您将鼠标指针移至任何一个控件的上方时,便会引发该控件的DragEnter事件。我们通常会在目标控件的DragEnter事件处理函数中,使用GetDataPresent方法去检测所拖曳的数据格式是否适用于目标控件,并使用DragEventArgs类型参数的Effect属性来设定所允许的置放操作。

5.如果用户在一个有效的置放目标上放开鼠标按键,将会引发目标控件的DragDrop事件。我们通常会在目标控件的DragDrop事件处理函数中编写程序代码,从DataObject对象撷取数据并将其显示于目标控件中。

关于拖放操作,您还必须注意下列事项:

某些控件具有自定义的特定拖曳事件。例如,ListView与TreeView控件就拥有ItemDrag事件。 当一项拖曳操作正在执行的时候,您可以处理QueryContinueDrag事件,该事件会向系统“要求使用权限”来继续执行拖曳操作。当以该方法处理的时候,也是一种对调用那些对拖曳操作有影响的方法非常恰当的时机。比方说,当鼠标指针停留在TreeView控件上方的时候展开一个TreeNode。 您也可以定义您自己的DataFormats。做法非常简单,您只需将您的对象指定为SetData方法中的Object参数,同时请确定所指定的对象是可序列化的。 除此之外,您还可以使用KeyState属性,以便根据拖放操作期间所按下的按键来产生特定效果。举例来说,当Ctrl键被按下时所拖曳的数据通常要进行复制。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值