在我看来,没有办法检测拖动操作是否成功,但必须有某种方法。假设我想执行从源到目标的“移动”。如果用户将鼠标放在某个无法接受放置的应用程序或控件上,我该如何判断?如何判断拖放操作是否失败?
对于这个问题,我怎么知道什么时候完成了拖拽?
我看到this question,但他的解决方案并没有为我工作,并e.Action
是总是Continue
。
在我看来,没有办法检测拖动操作是否成功,但必须有某种方法。假设我想执行从源到目标的“移动”。如果用户将鼠标放在某个无法接受放置的应用程序或控件上,我该如何判断?如何判断拖放操作是否失败?
对于这个问题,我怎么知道什么时候完成了拖拽?
我看到this question,但他的解决方案并没有为我工作,并e.Action
是总是Continue
。
我不确定这是否可以帮助您,但DoDragDrop方法会返回最终的DragDropEffects值。
var ret = DoDragDrop(...);
if(ret == DragDropEffects.None) //not successfull
else // etc.
啊,我想我已经明白了。原来DoDragDrop的调用实际上是同步(多么跛脚),并且返回的值是DragDropEffects
,如果操作失败,则返回值设置为None
。所以基本上这意味着只要用户处于拖动中,应用程序(或至少UI线程)就会被冻结。这对我来说似乎不是一个非常优雅的解决方案。
好cz_dl我看到你刚发布的那件事情,所以我会给你答案。
虽然我不明白:目的地如何确定操作应该是移动还是副本?不应该由源应用程序?
不能添加评论,所以另一个答案。 当我第一次看到DoDragDrop被同步调用,并且它不会冻结UI时,我也很惊讶。
但我相信复制/移动的东西完全合乎逻辑。您可以在源应用程序中调用DoDragDrop方法时指定允许的效果,这对您来说很重要。目的地应用程序将如何处理和使用它的数据。