2012-10-23 56 views
1

我有四個事件:一個處理程序的幾個事件

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:{} 
     ... 
    } 
} 

回答

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

我知道這是相當硬編碼,但沒有任何另一種方式。

+0

這根本沒有意義。您不需要將事件「type」作爲事件參數傳遞,因爲每個操作已經有一個事件。 –

+0

他想把所有的操作都放在一個方法上。這是實現它的唯一方法。我從來沒有說過我會那樣做。 –

0

而不是使用的EventArgs的,你可以使用自己的事件參數類中必要的數據傳遞,使處理程序中的選擇。

然後它就會變成你的e變量在處理程序中可用。

乾杯

相關問題