2016-03-21 42 views
5

Windowsフォームから、Windowsフォームから派生した別のクラスを含むウィンドウがあります。これはペイン内のコントロールとして含まれています。それは2つのボタンを含んでいます。子コントロールのclickイベントを親コントロールに渡します。

子コントロールのイベントをすべて親ウィンドウに渡したいと思います。たとえば、ペイン内の子ウィンドウにはCancelボタンがあり、これを閉じることになっています。親コントロール、つまりメインウィンドウも閉じたいのですが、どのように子コントロールのボタンクリックイベントをインターセプトできますか?

子コントロールを変更することはできますが、これを他の方法で正しく行うことができない場合にのみ、私はむしろそれを避けたいと思います。

+0

あなたが質問のために提供された記述は、タイトル、異なるです。あなたは何を正確にしたいですか?子コントロールをクリックすると、親フォームのクリックイベントを発生させますか?子コントロール内のボタンをクリックしたときに親フォームを閉じたいですか?または、他の何か? –

+0

ユーザーは、子コントロール上のボタンをクリックします - 子コントロール上のいくつかのイベントを除いて、親コントロールによってさえいくつかのアクションを取る必要がありますが、親コントロールに信号を送る最良の方法はわかりません。子供に何らかの出来事が引き起こされたことを示しています。これらのアクションは、すべてのフォームを閉じる、より複雑なフォームにするなどの一般的なアクションです。しかし、親は、子コントロールに属するコントロールでイベントがトリガーされたことに気づく必要があります。 – user1173240

+0

子フォームから直接親フォームとやりとりすることができますが、子コントロールによってイベントを発生させ、親フォームのイベントを購読する方が良いでしょう。 –

答えて

8

子フォームから直接親フォームとやりとりすることができますが、子コントロールでイベントを発生させ、親フォームのイベントを購読する方がよいでしょう。子供から

レイズのイベント:

public event EventHandler CloseButtonClicked; 
protected virtual void OnCloseButtonClicked(EventArgs e) 
{ 
    var handler = CloseButtonClicked; 
    if (handler != null) 
     handler(this, e); 
} 
private void CloseButton_Click(object sender, EventArgs e) 
{ 
    //While you can call `this.ParentForm.Close()` it's better to raise an event 
    OnCloseButtonClicked(e); 
} 

親にイベントを登録して使用します。

//Subscribe for event using designer or in form load 
this.userControl11.CloseButtonClicked += userControl11_CloseButtonClicked; 

//Close the form when you received the notification 
private void userControl11_CloseButtonClicked(object sender, EventArgs e) 
{ 
    this.Close(); 
} 
+0

ありがとうございます。子コントロールを修正することが可能かどうかを確認します。 – user1173240

+0

あなたは歓迎です:) –

関連する問題