2017-05-05 6 views
2

ボタンがあるクラス(フォーム/ウィンドウ)があるとします。私のクラスでは、ボタンをメソッドに登録して、自分のイベントをスローします:サブスクリプトされたイベントまたはこれを送信元とするイベントをトリガーしますか?

public delegate void MyEventHandler(object source, MyEventArgs e); 
public event MyEventHandler MyEvent; 
protected virtual void OnMyEvent(MyEventArgs e) 
{ 
    if (this.MyEvent != null) this.MyEvent(this, e); 
} 

private void Button_Click(object sender, EventArgs e) 
{ 
    this.OnMyEvent(???, ???); 
} 

イベントをトリガーする正しい方法は何ですか。 とthisを使用する必要がありますか?

this.OnMyEvent(this, new EventArgs()); 

送信者とイベントの引数を自分のイベントのサブスクリプションに送信する必要がありますか?

this.OnMyEvent(sender, e); 

正しい方法は何ですか。私たちは1つの方法だけに固執すべきですか? Microsoftはどうしていますか?コードガイドライン

ありがとうございます。

+0

は、あなたのイベントハンドラに必要なものによって異なります。ボタンからeventargsが必要ですか?それは新しいeventargsが必要ですか?または、おそらくそれは全くイベントの必要はありませんし、それらを署名から削除することはできますか? – Natrium

+1

refer- https://msdn.microsoft.com/en-us/library/edzehd2t%28v=1.2%29.aspx?f=255&MSPPError=-2147217396 – NoviceProgrammer

+0

@NoviceProgrammerしたがって、MSは「this」を送信者として使用します。 – modiX

答えて

1

あなたのイベントに登録する人について考えましょう。彼らはボタンから来たかどうかを知る必要がありますか?または、彼らはそれが解雇されたことを知る必要がありますか?

個人的には、イベントがトリガーされ、送信者が自分のクラスであることを知るだけで、最初にイベントを発生させることができるユーザーを変更することができます。ボタンクリック、タイマーなど

+1

加入者の場合に依存させるのは本当に良いことでしょうか?私はこれのためのルールを好むとそれに固執する。最初に '送信者'が常に 'オブジェクト 'であるため、異なるケースが混乱を引き起こすでしょう、そうではありませんか? – modiX

+1

申し訳ありませんが、私は特定の加入者ではなく加入者を意味しました。一貫性があり、送信者を常に同じオブジェクトに設定します。この場合、MyEventHandlerデリゲートを定義したクラスになります。 –

+0

これも私が信じていることです。私のイベントは 'this'で定義されています。ボタンイベントが発生したときでも、イベントを起こしているのは* me *です。私は他のプログラマーと意見を交換し、多くの異なる意見が出ました。 – modiX

関連する問題