ドラッグ アンド ドロップが進行中かどうかを確認する方法はありますか? チェックできるいくつかのメソッドまたはwin32 API? AllowDrop を設定してイベントを使用できることはわかっていますが、この場合は機能しません。基本的に、ドラッグ&ドロップが進行中かどうかをコードで確認したい。
4 に答える
私は自分で答えた同様の質問をしました(数時間いじった後)参照 - Winformsでドラッグドロップが終了したかどうかを確認するにはどうすればよいですか? .
基本的に、earwicker が示唆するように行う場合は、DoDragDrop 呼び出しの近くでドラッグ ドロップが開始されたときにフラグを設定する必要があります。QueryContinueDragEventArgs がドロップまたはキャンセルを示している場合は、DragDrop イベントと QueryContinueDrag の両方でフラグを設定解除する必要があります。
GetCapture API 関数は良い出発点かもしれません。基本的に、ドラッグ操作が開始されると、ソース ウィンドウはマウスを「キャプチャ」します。つまり、マウスがウィンドウから離れても、ソース ウィンドウは引き続きすべてのマウス イベントを受け取ります。
ただし、アプリケーションは他の理由でマウスをキャプチャすることもできるため、これは 100% 信頼できるわけではありません。試してみて、どれだけうまく機能するかを確認できます。また、アプリケーションが独自のドラッグ アンド ドロップ処理を行っているため、何が起こっているのかを確認する方法はありません。
QueryContinueDrag イベント ハンドラーhttp://msdn.microsoft.com/en-us/library/system.windows.forms.control.querycontinuedrag.aspxはどうですか? ハンドラーを任意のコントロールにフックし、進行中のドラッグ アンド ドロップ操作があるかどうかを確認し、必要に応じてキャンセルすることができます。
おっと、申し訳ありませんが、私の前の男がすでにそれについて言及しているのを見ました。私が悪い。
独自のコードのみのコンテキストであると仮定すると、ドラッグ/ドロップが発生するコード内のすべての場所を特定し、操作中にグローバルブールフラグを true に設定し、操作が終了したら false に戻すことができます。
次の質問は、アプリケーションでドラッグ アンド ドロップ操作がどのように開始されているかということです。