2009-02-02 41 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方法時指定允許的效果,這對您來說很重要。目的地應用程序將如何處理和使用它的數據。

相關問題