3

パネル、チャート コントロールなどの別のコントロールをホストするユーザー コントロールがあります。

現在、ヘッダー パネル コントロールの MouseClick イベントを実装してマウス イベントをキャプチャしていますが、ユーザー コントロール領域全体でマウス クリックまたは mouseDown イベントをキャプチャする必要があります。

pnlHeader.MouseUp += new MouseEventHandler(pnlHeader_MouseUp);  //it is working 

//Not able to capture because child control coverup all area of the usercontrol.
this.MouseDown += new MouseEventHandler(MyCustomControl_MouseDown); 

マウスクリック イベントをキャプチャする

このSOスレッドを調べましたが、マウスクリックまたはマウスダウンイベントに関しては役に立ちません。

では、ユーザーコントロールのマウスイベントをキャプチャするための正しく効率的な方法は何ですか??

何らかの参照コード (可能であれば) を含むアイデアや提案は受け入れられます。

前もって感謝します。

4

3 に答える 3

4

HTML や WPF のように、WinForms でイベントをバブリングする方法はありません。

WinForms アプリのユーザー コントロールのサブコントロールからイベントを取得するにはどうすればよいですか?

したがって、常に余分なコードを追加する必要があります。

于 2012-06-14T09:12:04.943 に答える
1

それほどコードを書かずにこれを書く方法があります。MouseDown既存のハンドラーを非表示にし、UserControl の各コントロールを直接フックするユーザー コントロール内に独自のイベント ハンドラーを作成できます。たとえば、 aPanelと aを含む UserControl の MouseDown ハンドラーは次のListBoxとおりです。

// MouseDown event handler within UserControl
public new event MouseEventHandler MouseDown
{
    add 
    { 
        panel1.MouseDown += value;
        listBox1.MouseDown += value;
    }
    remove 
    { 
        panel1.MouseDown -= value;
        listBox1.MouseDown -= value;
    }
}

UserControl にさらにコントロールがある場合は、それらを各セクションに追加するだけです。

親の WinForm での呼び出しは、MouseDown次のように UserControl のイベントをフックする必要があります。

myUserControl1.MouseDown += myUserControl1_MouseDown;
于 2012-06-14T14:22:40.003 に答える