2013-06-19 28 views
1

嘿,我是新來使用事件處理程序等,並且我在與獲得一個工作 這是我的命名空間中的幾個問題:故障與創建一個事件處理

public delegate void buttonChange(object sender, EventArgs e); 

這是前主要形式:

public static event buttonChange eventButtonChange; 

然後主內我有:

buttonChangeListener listener = new buttonChangeListener(); 
eventButtonChange += new buttonChange(buttonChangeNeeded); 

然後,過程:

void buttonChangeNeeded(object sender, buttonChangeArgs e) 
    { 
     // The Program has moved a state forward 
     switch (e.TheNumber) 
     { 
      case 1: 
       // Probe has been purged 
       this.SetBtnAutoCycle1(true); 
       break; 
      case 2: 
       //First Auto-Cycle Complete 
       this.SetBtnPerf(true);      
       break; 
      case 3: 
       //Performance Test Complete 
       this.SetBtnAutoCycle2(true); 
       break; 
      case 4: 
       //Second Auto-Cycle Complete 
       this.SetBtnReport(true); 
       break; 
      default: 
       break; 
     } 

然後最後一個單獨的類:

public class buttonChangeArgs : EventArgs 
{ 
    public readonly int TheNumber; 

    public buttonChangeArgs(int num) 
    { 
     TheNumber = num; 
    } 
} 
public class buttonChangeListener 
{ 
    public void changeTheButton(object o, buttonChangeArgs e) 
    { 
     Console.WriteLine(
      "The button should move down too: {0}", 
      e.TheNumber); 
    } 
} 

說實話,我已經通過通過教程看,並試圖模仿他們,但真的不理解他們,包括MSDN指導,我正在大學讀書,但答應一個家庭成員,我會在夏天爲他們開發一些軟件,到目前爲止它已經很好,但我已經碰到了一堵磚牆。

感謝

回答

1

您已聲明與EventArgs類型的第二個參數的委託。然而,在你的主體中,你正在使用不接受EventArgs而是它的子類的處理程序來訂閱它。編譯器無法在此處進行轉換。

可以通過聲明的委託接受您的具體參數解決這個問題:

public delegate void buttonChange(object sender, buttonChangeArgs e); 

除此之外,最有可能你的Main是一個靜態方法(我假設你正在寫一個控制檯應用程序)。在這種情況下,您使用buttonChangeNeeded是無效的,因爲它不是靜態的(至少從我們可以看到的)。

+0

謝謝,不,這是一組表格,因此我需要一些東西來改變按鈕......我這樣做的原因是因爲我想能夠指定何時按鈕在其他窗體上可用,並且cann別想辦法做到這一點。任何方式感謝你的幫助。 – user2501113