2016-10-28 23 views
0

私は3つのラベルを持つユーザーコントロールを持っています。キャンバス上の任意の位置(ラベル内であっても)でコントロールがクリックされると、親フォーム上のクリックイベントが発生するようにしたいと思います。 3つのラベルが付いたボタンのように...今はベースキャンバス部分がクリックされたときにのみ親イベントを発生させますが、ラベルをクリックすると気泡が出ることはありません。私は、イベントハンドラを割り当てるコンストラクタで まず、:複数のコントロールを持つユーザーコントロールは、クリックを処理します

private void RunCodeButton_Click(object sender, EventArgs e) 
    { 
     ButtonClick?.Invoke(this, e); 
    } 

そして、メインフォーム(ないで:

public partial class RunCodeButton : UserControl 
{ 
    public event EventHandler ButtonClick; 

    public RunCodeButton() 
    { 
     InitializeComponent(); 
     LblCode.Click += RunCodeButton_Click; 
     LblCount.Click += RunCodeButton_Click; 
     LblDescription.Click += RunCodeButton_Click; 
    } 
} 

それから私は、ユーザーコントロールのクリックイベントがクラスに追加されてい私は、ボタンを生成する際にユーザーコントロール)、私は、クリックイベントを追加します。私は、ユーザーコントロール内のブレークポイントを設定

_button.Click += Button_Click; 
private void Button_Click(object sender, EventArgs e) 
{ 
     Result = DialogResult.OK; 
     RunCode = (Codes_Run)((RunCodeButton)sender).Tag; 
     Close(); 
} 

場合は、イベントをクリックし、[ラベル]をクリックします。それはイベントを発生させますが、 'ButtonClick'は常にnullであり、そこで停止します。

ユーザーコントロールの子コントロールのクリックイベントのバブルを上げる方法はありますか?

+0

これはwinformsまたはWPFですか? –

+0

Winforms。申し訳ありません – rigamonk

+0

[親コントロールに子コントロールのクリックイベントを渡す](http://stackoverflow.com/a/36130796/3110834) –

答えて

1

あなたも_button.ButtonClickは必要ありませんが

_button.ButtonClick += Button_Click; 
線を中心

_button.Click += Button_Click; 

を追加します。単純に実行する

private void RunCodeButton_Click(object sender, EventArgs e) 
{ 
    Click?.Invoke(this, e); 
} 
関連する問題