2011-01-05 3 views
1

PREFACEC# Ereignisbehandlung mit zusätzlichen Parametern befestigen

ich ein Windows-Formular-Knopf haben, die das Ereignis OnClick (object sender, EventArgs e) aussetzt. In meiner Anwendung kann ich damit umgehen, indem die klassischen Event-Handling-Technik von C#:

// Button Creation 
Button button = new Button(); 
button.Click += MyEventHandler; 

Dann mir Windows Form mit der folgenden Signatur für einen Handler fragen:

public void MyEventHandler(object sender, EventArgs e) { } 

Angenommen, Ich mag würde verwenden Lambda-Ausdruck, dies zu tun kann ich die Syntax:

button.Click += (sender, args) => 
{ 
    // execute the code 
}; 

der Nachteil dabei ist, dass ich nicht von einem Lambda-Ausdruck austragen kann.

FRAG

Was würde ich tun möchte, ist eine Utility-Klasse zu haben, die mir erlauben, und unter Verwendung eine zusätzliche Aktion als Parameter jedes Click-Ereignis zu behandeln. Also würde ich gerne so etwas schreiben:

button.Click += MyUtility.Click(() 
    => { 
     // the custom code the Click event will execute 
    }) 

Kann ich es irgendwie machen?

+2

Warum durchlaufen Sie all das, wenn Sie bereits eine Lösung haben? Verwenden Sie kein Lambda, wenn Sie sich einfach abmelden müssen. –

+0

Sie haben die Frage überhaupt nicht beantwortet ... – Raffaeu

Antwort

4

Sie können den Lambda-Ausdruck einer lokalen Variablen oder einem lokalen Feld zuweisen.

Zum Beispiel:

EventHandler handler = (sender, args) => 
{ 
    // execute the code 
}; 

button.Click += handler; 
button.Click -= handler; 

Wenn Sie innerhalb des Handlers abbestellen möchten, werden Sie handler zu null, dann auf die Lambda zuweisen müssen, eindeutige Zuordnung Probleme zu vermeiden.

+0

Guter Punkt !! Vielen Dank – Raffaeu