2015-12-04 30 views
0
private void button1_Click(object sender, EventArgs e) 
{ 
    //code 
    //error saying local variable named e can't be passed 
    this.timer1[i].Tick += new System.EventHandler((s,e)=>this.timer1_Tick(s,e,i)); 
    //code 
} 

private void timer1_Tick(object sender, EventArgs e, int i) 
{ 
    //code 
} 

這兩種方法都需要相同的eventArgs。問題是因爲我需要將我也傳遞給第二種方法。任何其他方式來做到這一點?代表C#:將當前方法EventArgs傳遞給另一個方法

+1

編譯器只是混淆你的命名。您試圖引用名爲'e'的第二個變量。將內部的'e'改爲'ea'或類似的東西,就像這樣:'this.timer1 [i] .Tick + = new System.EventHandler((s,ea)=> this.timer1_Tick(s,ea,i) );' –

+0

但如果我這樣做,我不能修改另一個函數中的timer1。我得到一個nullReferenceException –

+1

更改內部變量名稱不應該影響能夠修改任何東西......''EventArgs'甚至不包含任何可以幫助你的東西。 –

回答

1

你需要更清楚你正在嘗試做什麼 - 不會將事件參數傳遞給定時器的Tick事件; 定時器呢。你所做的只是附加一個事件處理函數,當定時器的Tick事件被引發時將被調用。如果您希望計時器的Tick事件處理程序引用傳遞到Click事件的事件參數的某些部分,然後將這些參數存儲在類屬性中或事件處理程序可以訪問的某個位置。

或者,如果你有一些代碼是要執行一旦單擊該按鈕時,然後移動到一個單獨的功能,可以調用來回兩個Click事件和Tick事件Tick事件處理程序。 Simeply 附加事件處理程序不執行它。

1
private void button1_Click(object sender, EventArgs e) 
{ 
    this.timer1[i].Tick += new System.EventHandler((local_s,local_e)=>this.timer1_Tick(local_s,local_e,i)); 
    //code 
} 

private void timer1_Tick(object sender, EventArgs e, int i) 
{ 
    //code 
} 
0
private void Button1_Click(object sender, EventArgs args)  
{ 
    Timer1.Tick += (s, a) => 
    { 
     //Anonymous delegate can access the sender and args 
     //parameters and variables of the outer scope. 
    } 
} 
相關問題