назначение аргументов события

у меня есть этот обработчик событий

Temp.MouseLeftButtonDown += new MouseButtonEventHandler(Temp_MouseLeftButtonDown);

но я хочу отправить некоторый параметр для доступа в функции Temp_MouseLeftButtonDown. как мне его назначить??


person Miroo    schedule 08.06.2010    source источник


Ответы (1)


Вы не можете сделать это напрямую, потому что обработчик событий может ожидать только совместимую сигнатуру с MouseButtonEventHandler.

Если вы используете C# 3, самым простым подходом будет использование лямбда-выражения, например:

Temp.MouseLeftButtonDown +=
   (sender, args) => Temp_MouseLeftButtonDown(sender, args, "extra argument");

Это помогает? Конечно, если вам не нужны аргументы отправителя и события, вам не нужно их указывать.

В C# 2 таким же образом можно было использовать анонимный метод.

person Jon Skeet    schedule 08.06.2010
comment
Может ли кто-нибудь сказать, что мало веских причин для того, чтобы иметь дополнительные аргументы в хедлере? пожалуйста и спасибо!!! - person VoodooChild; 08.06.2010
comment
@VoodooChild: вы можете использовать большую часть одной и той же логики в разных местах, но с некоторыми вариациями. - person Jon Skeet; 08.06.2010
comment
Спасибо, это сработало как шарм (Y) @VoodooChild: в моем случае создаются кнопки во время выполнения, и каждая кнопка имеет другое значение, которое я хочу обработать, поэтому я хотел передать это значение с каждым методом для каждой кнопки. Просто комментарий. Я получал ошибку, когда пытался передать значение, используя значение цикла i, но оно работало нормально, когда я помещал значение в переменную, а затем передал этот пример переменной: двойное значение = Positions[i].AdPosition; Temp.MouseLeftButtonDown += (sender, args) => TempBreak_MouseLeftButtonDown(value); - person Miroo; 08.06.2010