2013-08-14 19 views
12

Mam przycisk łącza, które mają regularną zdarzenie click:C# zdać dodatkowy parametr do obsługi zdarzeń podczas wiązania zdarzenie w czasie wykonywania

protected void lnkSynEvent_Click(object sender, EventArgs e) 
{ 
} 

I wiążą to wydarzenie w czasie wykonywania:

lnkSynEvent.Click += new EventHandler(lnkSynEvent_Click); 

teraz muszę funkcję przyjąć dodatkowy argument:

protected void lnkSynEvent_Click(object sender, EventArgs e, DataTable dataT) 
{ 
} 

I przechodzą takie same jak param Podczas wiązania tego zdarzenia:

lnkSynEvent.Click += new EventHandler(lnkSynEvent_Click, //somehow here); 

Nie wiesz, jak to osiągnąć. Proszę o pomoc.

Z góry dziękuję.

Vishal

+0

Gdzie jest DataTable zamiar pochodzi? –

+0

@PaulieWaulie tam, gdzie wiążę wydarzenie. – Vishal

Odpowiedz

39

Można użyć anonimowego delegata na to:

lnkSynEvent.Click += 
     new EventHandler((s,e)=>lnkSynEvent_Click(s, e, your_parameter)); 
+0

WOW działało jak czar, dzięki @alex, ciężko nie jestem jeszcze sławna z anonimowymi delegatami. – Vishal

+0

Należy oznaczyć tę odpowiedź jako prawidłową. To może pomóc innym. –

+0

Po prostu możesz napisać tak: Object.SomeEvent + = (nadawca, e) => SomeEventHandler (nadawca, e, "Dane"); /// I zdefiniuj program obsługi zdarzeń w ten sposób: void SomeEventHandler (obiekt nadawcy, SomeEventArgs e, dane ciągu); –

2

przy użyciu delegata:

lnkbtnDel.Click += delegate(object s, EventArgs e1) { 
       Dynamic_Click(s, e1, lnkbtnDel.ID); 
       };` 
3

Nie wiem dokładnie, kiedy to się zmieniło, ale teraz to nawet łatwiej!

lnkSynEvent.Click += (s,e) => lnkSynEvent_Click(s, e, your_parameter); 
+0

To rzeczywiście pracował lepiej w moim scenariuszu, jak i potrzebne do mapowania oczekiwanej eventhandler do EventHandler Przyjęte rozwiązanie nie rozwiązało ten scenariusz. – Stunt

0
EventHandler myEvent = (sender, e) => MyMethod(myParameter);//my delegate 

myButton.Click += myEvent;//suscribe 
myButton.Click -= myEvent;//unsuscribe 

private void MyMethod(MyParameterType myParameter) 
{ 
//Do something 
}