web-dev-qa-db-ja.com

ユーザーコントロールでイベントを発生させ、メインページでそれをキャッチするにはどうすればよいですか?

UserControlがあり、UserControlのボタンがクリックされたことを親ページに通知する必要があります。 UserControlでイベントを発生させ、メインページでキャッチするにはどうすればよいですか? staticを使用してみましたが、多くの人がイベントに行くように勧めました!

48
user677607

イベントバブリングを確認してください- http://msdn.Microsoft.com/en-us/library/aa719644%28vs.71%29.aspx

簡単な例を追加するための編集:(および書式設定を改善するための追加の編集)

ユーザーコントロール

public event EventHandler StatusUpdated;

private void FunctionThatRaisesEvent()
{
    //Null check makes sure the main page is attached to the event
    if (this.StatusUpdated != null)
       this.StatusUpdated(this, new EventArgs());
}

Main Page/Form

public void MyApp()
{
     //USERCONTROL = your control with the StatusUpdated event
     this.USERCONTROL.StatusUpdated += new EventHandler(MyEventHandlerFunction_StatusUpdated);
}

public void MyEventHandlerFunction_StatusUpdated(object sender, EventArgs e)
{
         //your code here
}
86
Jemes

コントロールにイベントを追加するだけです:

public event EventHandler SomethingHappened;

親に通知したいときに上げます:

if(SomethingHappened != null) SomethingHappened(this, new EventArgs);

カスタムEventArgsが必要な場合は、EventHandler<T>代わりにTから派生した型のEventArgsを使用します。

7
Zebi

または、より分離されたソリューションを探している場合は、MVVM Light Messengerなどのメッセンジャーパブリッシャー/サブスクライバーモデルを使用できます here

1
Phil Murray