2015-12-04 1 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

, но если я сделаю это, я не могу изменить таймер1 в другой функции. Я получаю nullReferenceException –

+1

Изменение имени внутренней переменной не должно влиять на возможность изменения чего-либо ... 'EventArgs' даже не содержит ничего, что могло бы вам помочь. –

ответ

1

Вы должны быть более ясными о том, что вы пытаетесь сделать - вы не передаете аргументы события события Tick таймера; таймер. Все, что вы делаете, это привязка обработчика событий, который будет вызываться, когда событие таймера Tick будет поднято. Если вы хотите, чтобы обработчик события Tick таймера ссылался на некоторую часть аргументов событий, переданных в событие Click, сохраните их в свойстве класса или где-нибудь, к которому может обращаться обработчик событий.

Или, если у вас есть код, который находится в обработчике Tick событий, которые вы хотите выполнить раз при нажатии на кнопку, затем переместите, что в отдельную функцию, которую можно назвать сюда как Click события и 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. 
    } 
}