Мне нелегко было выяснить пример @ spender выше, особенно с: Object.assignHandler((sender) => evHandler(sender,someData));
, потому что в буквальном смысле нет такой вещи, как Object.assignHandler
. Поэтому я сделал немного больше Google и нашел this example. Ответ Питер Duniho был один, что щелкнуло в голове (это не моя работа):
надрез
Обычный подход заключается в использовании анонимного метода с обработчиком событий, который имеет ваш модифицированный подпись. Например:
void Onbutton_click(object sender, EventArgs e, int i) { ... }
button.Click += delegate(object sender, EventArgs e)
{ Onbutton_click(sender, e, 172); };
Конечно, вы не должны пройти в 172, или даже сделать третий параметр Int. :)
/чик
Используя этот пример, я смог пройти в двух пользовательских ComboBoxItem
объектов в Timer.Elapsed
событий с помощью лямбда-нотации:
simulatorTimer.Elapsed +=
(sender, e) => onTimedEvent(sender, e,
(ComboBoxItem) cbPressureSetting.SelectedItem,
(ComboBoxItem) cbTemperatureSetting.SelectedItem);
, а затем в это обработчик:
static void onTimedEvent(object sender, EventArgs e, ComboBoxItem pressure, ComboBoxItem temperature)
{
Console.WriteLine("Requested pressure: {0} PSIA\nRequested temperature: {1}° C", pressure, temperature);
}
Это не новый код из приведенных выше примеров, но он демонстрирует h чтобы их интерпретировать. Надеюсь, кто-то вроде меня найдет поучительным &, чтобы они не часами пытались понять концепцию, как я.
Этот код работает в моем проекте (за исключением исключений, не связанных с потоком, с объектами ComboBoxItem
, которые, как я считаю, не изменят, как работает этот пример). Теперь я это выясню.
У меня есть более стандартное решение в этом вопросе, первый ответ http://stackoverflow.com/questions/14058412/passing-parameter-to-an-event-handler/14058441#14058441 –