完成或取消拖放时在事件源中触发事件

时间:2011-11-28 17:29:50

标签: .net vb.net winforms events drag-and-drop

我知道通常有一个DoDragDrop方法可以启动拖放操作。并且可以在目标端处理事件(例如DragEnterDragOverDragDropDragLeave)。

是否有任何关于拖拽来源的事件会告诉我拖拽操作是否已完成或可能已取消?

2 个答案:

答案 0 :(得分:6)

是的,DoDragDrop()具有返回值。如果删除了drop,它将返回DragDropEffects.None。

答案 1 :(得分:1)

您指的是类似于Windows资源管理器中删除粘贴的情况,其中文件未从源文件夹中删除,直到粘贴操作发生。

http://msdn.microsoft.com/en-us/library/bb776904(VS.85).aspx#delete_on_paste

简单回答

如果您是在同一个应用程序实例中执行此操作,那么这将被称为优化移动,您可以在其中设置本地标志(例如布尔变量)以确定是否很成功。

更新:是的,您还可以检查DoDragDrop方法的结果,以确定放置是否成功。如果完成删除时出错,请确保您的drop处理代码正确地将Effect设置为None,否则您的DoDragDrop代码会认为drop是成功的。此方法甚至可以在您的应用程序的两个实例之间工作。

硬答案

如果您在应用程序的两个实例之间执行此操作,并且需要传输更多信息,无论删除是否成功,那么您需要实现IDataObject的OLE版本以便应用程序作为drop target的实例完成拖放,它可以调用源对象上的SetData来发送结果信息。这样做很复杂,但肯定是可能的。

有关执行此操作的详细信息,请参阅以下链接:

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comtypes.idataobject.aspx

http://blogs.msdn.com/b/delay/archive/2009/10/26/creating-something-from-nothing-developer-friendly-virtual-file-implementation-for-net.aspx

相关问题