2

テーブルのイベント内からメソッドをContextMenuStrip呼び出し、テーブルを Control パラメーターとして渡すことにより、テーブル内のセルにマウスを置いたときにユーザーにいくつかのオプションを表示するためにを使用しています。Show(Control, int, int)MouseMove

アプリがアクティブでない場合、すべてが意図したとおりに機能します。ただし、アプリがアクティブな場合は、 が表示されるとMouseMoveイベントの発生が停止しContextMenuStripます。

ContextMenuStrip を表示しているときにマウス移動イベントを受け取るにはどうすればよいですか? フックやアプリケーション フィルターを追加したくありません。アプリがアクティブな場合でも、非アクティブなアプリの動作が必要です。

4

2 に答える 2

1

これは単なるマウス キャプチャではなく、簡単に回避できます。「ModalMenuFilter」という名前の内部クラスがあり、さまざまなメッセージをフィルタリングするツールストリップ ドロップダウンが表示されたときにアクティブ化されます。WM_MOUSEMOVE を含みます。これは、SetWindowsHookEx() を使用して行います。このフックはフォームがアクティブなときにのみインストールされるため、アプリがアクティブでないときに機能します。

これにはコードからアクセスできません。リフレクションを使用する必要があります。ModalMenuFilter.RemoveActiveToolStrip() を使用してフィルターを無効にできるように見えます。リフレクターでご覧ください。ただし、これにより他の問題が発生する可能性が高くなります。

于 2009-12-07T18:35:15.130 に答える
0

それは不可能です。コンテキスト メニュー ストリップが表示されると、メニュー ウィンドウがマウスをキャプチャします。

于 2009-12-07T16:39:26.083 に答える