2009-02-02 62 views
4

在我看来,没有办法检测拖动操作是否成功,但必须有某种方法。假设我想执行从源到目标的“移动”。如果用户将鼠标放在某个无法接受放置的应用程序或控件上,我该如何判断?如何判断拖放操作是否失败?

对于这个问题,我怎么知道什么时候完成了拖拽?

我看到this question,但他的解决方案并没有为我工作,并e.Action总是Continue

回答

6

我不确定这是否可以帮助您,但DoDragDrop方法会返回最终的DragDropEffects值。

var ret = DoDragDrop(...); 
if(ret == DragDropEffects.None) //not successfull 
else // etc. 
3

啊,我想我已经明白了。原来DoDragDrop的调用实际上是同步(多么跛脚),并且返回的值是DragDropEffects,如果操作失败,则返回值设置为None。所以基本上这意味着只要用户处于拖动中,应用程序(或至少UI线程)就会被冻结。这对我来说似乎不是一个非常优雅的解决方案。

好cz_dl我看到你刚发布的那件事情,所以我会给你答案。

虽然我不明白:目的地如何确定操作应该是移动还是副本?不应该由源应用程序?

0

不能添加评论,所以另一个答案。 当我第一次看到DoDragDrop被同步调用,并且它不会冻结UI时,我也很惊讶。

但我相信复制/移动的东西完全合乎逻辑。您可以在源应用程序中调用DoDragDrop方法时指定允许的效果,这对您来说很重要。目的地应用程序将如何处理和使用它的数据。