1

私には4つのイベントがあります:

View.AdditionPerformed += new EventHandler<EventArgs>(OnOperationPerformed);
View.SubtractionPerformed+=new EventHandler<EventArgs>(OnOperationPerformed);
View.DivisionPerformed+=new EventHandler<EventArgs>(OnOperationPerformed);
View.MultiplyPerformed+=new EventHandler<EventArgs>(OnOperationPerformed);

そして1つの方法:

private void OnOperationPerformed(object sender, EventArgs e)
 {

 } 

どのイベントがメソッドを発生させたかをどのように定義できますか?このようなもの:

private void OnOperationPerformed(object sender, EventArgs e)
 {
    switch(event)
     {
      case MultiplyPerformed:{}
      case DivisionPerformed:{}
      ...
     }  
 } 
4

2 に答える 2

4

あなたに提起されたイベントを伝えるEventArgs、内部を持っているあなた自身を書いてください。enum

enum MyEventEnum
{
    AdditionPerformed,
    SubtractionPerformed,
    DivisionPerformed,
    MultiplayPerformed
}

TheEventArgs

class MyEventArgs : EventArgs
{
    public MyEventEnum EventRaised { get; set; }
}

ハンドラーを定義する

View.AdditionPerformed += new EventHandler<MyEventArgs>(OnOperationPerformed);
View.SubtractionPerformed+=new EventHandler<MyEventArgs>(OnOperationPerformed);
View.DivisionPerformed+=new EventHandler<MyEventArgs>(OnOperationPerformed);
View.MultiplyPerformed+=new EventHandler<MyEventArgs>(OnOperationPerformed);

あなたがそれらを呼ぶとき:

this.AdditionPerformed(this, new MyEventArgs 
    { EventRaised = MyEventEnum.AdditionPerformed };

かなりハードコーディングされていることは知っていますが、他に方法はありません。

于 2012-10-23T09:00:08.060 に答える
0

EventArgsを使用する代わりに、独自のイベント引数クラスを使用して必要なデータを渡し、ハンドラー内で選択を行うことができます。

その後、ハンドラー内のe変数で使用できるようになります。

乾杯

于 2012-10-23T08:57:36.997 に答える