0

フォームにいくつかのコントロール (ラベル、カスタム テキスト ボックス、Datagridview) をドッキングしています。MouseMove イベントを個々のコントロールにフックしようとすると、イベントは問題なく発生しますが、フォーム自体にイベントをフックしようとすると、mousemove イベントはまったく応答しません。これの考えられる原因は何ですか?

編集:

これは、resources.cs のイベント フックです。

this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.LogicSimulationViewerForm_MouseMove);

イベントのキャッチ時に処理される関数は次のとおりです

private void LogicSimulationViewerForm_MouseMove(object sender, MouseEventArgs e)
        {
           //DOESN'T WORK!!!
        }
4

2 に答える 2

3

Winforms イベントは、WPF や Html のようにバブルアップしません。したがって、コントロールがフォームにドッキングされている場合、フォームは独自のサーフェスを公開せず、マウス イベントをキャッチしません。ただし、「水中」では、すべての Windows メッセージ (マウスの動きは Windows メッセージです) はフォームを通過するため、そのメッセージをキャッチすることができます。

edit Tigran はIMessageFilter を使用するための良い例にリンクしているため、別の例を作成するのは少し余計です :)

于 2012-06-26T06:56:23.497 に答える
2

この原因は、イベント内の違いがWPFWindowsFormsそれを処理したコントロールによって「ブロック」されていることです (WPFイベント内では、ビジュアル ツリーまでの親にプッシュされるか、親から子へと反対方向にプッシュされます)。

したがって、そのイベントをキャッチするには、アプリケーション レベルで処理する必要があり、単一のコントロール イベントをサブスクライブしないでください。

それを処理する方法の詳細な例については、ここを参照してください。

winform アプリケーションでマウス マウス移動イベントをキャプチャするにはどうすればよいですか

于 2012-06-26T06:57:39.160 に答える