0

パネル上のいくつかの変数をクリアしようとしています。たとえば、パネルのサーフェスをクリックしてドラッグしていることを知らせるブール値がある場合、MouseUp イベントが発生したときにこれを false に設定します (これは、発生する場合と発生しない場合があります)。これを行う正しい方法ですが、例として役立ちます)。

クリックしてドラッグしているときに別のアプリケーションに Alt-Tab キーを押した場合、たとえば focus->leave / mouseup などの通知がパネル自体に表示されない場合、見逃しているもの、見落としているイベントはありますか?

フォームの Deactivate イベントを使用してこれを行う方法があるようです。これは、新しい Panel クラスを作成する場合にパネルで中断タイプのメソッドを呼び出すことができると思いますが、すべてを伝播する何かが既に存在するかどうか疑問に思っていました私たちのフォームがもはや主な焦点ではないという通知とともに、フォーム上の子供たち。

4

1 に答える 1

2

この種の通知を確実に取得するには、Captureプロパティを使用する必要があります。MouseDownイベントでtrueに設定します。これにより、マウスがパネルにカーソルを合わせていなくても、すべてのマウスメッセージがパネルに送信されます。ただし、Alt+TabやAlt+Escなどの失礼なフォーカスの変更はまだカバーされていません。また、オペレーティングシステムがいつステップインしたかを知るために、MouseCaptureChangedイベントを実装する必要があります。

一般に、ドラッグ+ドロップを実装しようとしている場合は、DoDragDrop()を使用する必要があります。戻ってきたら、理由を問わず、ドラッグ操作が完了したことを常に確認できます。メソッドの戻り値は、何が起こったかを示します。これは別のウィンドウへの切り替えもサポートしていることに注意してください。ただし、あまり検出されない場合は、タスクバーボタンにドラッグして強制的に切り替えます。

于 2012-11-20T14:32:27.003 に答える