2011-01-05 2 views
1

предисловиемC# подключают обработки событий с дополнительными параметрами

У меня есть форма кнопки Windows, которая предоставляет событие OnClick (объект отправитель, EventArgs е). В моем приложении я могу справиться с этим, используя классическую технику C# обработки событий:

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

Тогда форм Windows просить у меня обработчик со следующей подписью:

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

Предположим, что я хотел использовать лямбда-выражения, чтобы сделать это, я могу использовать синтаксис:

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

недостатком этого является то, что я не могу отказаться от лямбда-выражения.

ВОПРОС

То, что я хотел бы сделать, это иметь служебный класс, который позволит мне справиться с любой Click событие плюс, используя дополнительное действие в качестве параметра. Поэтому я хотел бы написать примерно так:

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

Могу ли я это сделать каким-то образом?

+2

Зачем проходить через все это, когда у вас уже есть решение? Не используйте лямбда, если вам нужно отказаться от подписки, просто. –

+0

Вы вообще не ответили на вопрос ... – Raffaeu

ответ

4

Вы можете назначить лямбда-выражение локальной переменной или полю.

Например:

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

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

Если вы хотите отказаться от подписки внутри обработчика, вам необходимо назначить handler для null, затем лямбда, чтобы избежать проблем определенных назначений.

+0

Хорошая точка !! благодаря – Raffaeu

Смежные вопросы