6

在我看来,没有办法检测拖动操作是否成功,但必须有某种方法。假设我想执行从源到目的地的“移动”。如果用户将鼠标悬停在无法接受放置的某些应用或控件上,我怎么知道?

就此而言,我怎么知道拖动何时完成?

我看到了这个问题,但他的解决方案对我不起作用,而且e.Action总是。 Continue

4

3 回答 3

9

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

var ret = DoDragDrop( ... );
if(ret == DragDropEffects.None) //not successfull
else // etc.
于 2009-02-02T21:00:15.950 回答
5

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

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

不过我不明白:目的地如何确定操作应该是移动还是副本?这不应该取决于源应用程序吗?

于 2009-02-02T21:03:10.390 回答
0

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

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

于 2009-02-02T23:08:46.750 回答