几个事件的一个处理程序

时间:2012-10-23 08:54:06

标签: c# .net events handler

我有四个事件:

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

和一种方法:

private void OnOperationPerformed(object sender, EventArgs e)
 {

 } 

如何定义引发我的方法的事件?像这样:

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

2 个答案:

答案 0 :(得分:4)

编写自己的EventArgs,其中包含enum,告诉您引发的事件。

enum MyEventEnum
{
    AdditionPerformed,
    SubtractionPerformed,
    DivisionPerformed,
    MultiplayPerformed
}

EventArgs

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 };

我知道它很硬编码,但没有别的办法。

答案 1 :(得分:0)

您可以使用自己的事件参数类来传递必要的数据,以便在处理程序中进行选择,而不是使用EventArgs。

然后它将在处理程序内的e变量上可用。

干杯