ドラッグ操作が成功したかどうかを検出する方法はないように思えますが、何らかの方法があるはずです。ソースから宛先への「移動」を実行したいとします。ユーザーがドロップを受け入れることができないアプリまたはコントロールの上でマウスを離した場合、どうすればわかりますか?
さらに言えば、ドラッグがいつ完了したかをどうやって知ることができますか?
私はこの質問e.Action
を見ましたが、彼の解決策は私にはうまくいきません Continue
。
ドラッグ操作が成功したかどうかを検出する方法はないように思えますが、何らかの方法があるはずです。ソースから宛先への「移動」を実行したいとします。ユーザーがドロップを受け入れることができないアプリまたはコントロールの上でマウスを離した場合、どうすればわかりますか?
さらに言えば、ドラッグがいつ完了したかをどうやって知ることができますか?
私はこの質問e.Action
を見ましたが、彼の解決策は私にはうまくいきません Continue
。
それが役立つかどうかはわかりませんが、DoDragDrop メソッドは最終的な DragDropEffects 値を返します。
var ret = DoDragDrop( ... );
if(ret == DragDropEffects.None) //not successfull
else // etc.
ああ、私はそれを持っていると思います。DoDragDrop への呼び出しは実際には同期的であり (いかに不自由であるか) 、op が失敗した場合にDragDropEffects
設定されるの値を返します。None
したがって、基本的にこれは、ユーザーがドラッグの最中にある限り、アプリ (または少なくとも UI スレッド) がフリーズすることを意味します。それは私にとって非常にエレガントな解決策とは思えません。
わかりました cz_dl まさにそれを投稿したばかりなので、答えを出します。
これは私にはわかりませんが、操作が移動かコピーかを宛先がどのように判断できるのでしょうか? それはソース アプリ次第ではないでしょうか。
まだコメントを追加できないため、別の回答です。また、初めて DoDragDrop が同期的に呼び出され、UI がフリーズしないことにも驚きました。
しかし、私が信じているコピー/移動は完全に論理的です。ソースアプリで DoDragDrop メソッドを呼び出すときに、許可される効果を指定できます。これはすべて重要なことです。宛先アプリがデータを処理および使用する方法は、それ次第です。