Tuve un momento difícil para resolver el ejemplo de @ spender anterior especialmente con: Object.assignHandler((sender) => evHandler(sender,someData));
porque no existe tal cosa como Object.assignHandler
en el sentido literal. Así que hice un poco más de búsqueda en Google y encontré this example. La respuesta de Peter Duniho fue el que hizo clic en mi cabeza (esto no es mi trabajo):
tijeretazo
El enfoque habitual es utilizar un método anónimo con un controlador de eventos que tiene su modificación firma. Por ejemplo:
void Onbutton_click(object sender, EventArgs e, int i) { ... }
button.Click += delegate(object sender, EventArgs e)
{ Onbutton_click(sender, e, 172); };
Por supuesto, usted no tiene que pasar en 172, o incluso hacer que el tercer parámetro un int. :)
/recorte
Usando ese ejemplo yo era capaz de pasar de dos a medida ComboBoxItem
objetos a un Timer.Elapsed
evento utilizando lambda notación:
simulatorTimer.Elapsed +=
(sender, e) => onTimedEvent(sender, e,
(ComboBoxItem) cbPressureSetting.SelectedItem,
(ComboBoxItem) cbTemperatureSetting.SelectedItem);
y luego en él del manipulador:
static void onTimedEvent(object sender, EventArgs e, ComboBoxItem pressure, ComboBoxItem temperature)
{
Console.WriteLine("Requested pressure: {0} PSIA\nRequested temperature: {1}° C", pressure, temperature);
}
Este no es un código nuevo de los ejemplos anteriores, pero sí demuestra h cómo interpretarlos. Espero que alguien como yo lo encuentre instructivo & útil para que no pasen horas tratando de entender el concepto como yo lo hice.
Este código funciona en mi proyecto (a excepción de una excepción no segura para subprocesos con los objetos ComboBoxItem
que no creo que cambien la forma en que funciona el ejemplo). Estoy descifrando eso ahora.
tengo una solución más habitual en esta pregunta, la primera respuesta http://stackoverflow.com/questions/14058412/passing-parameter-to-an-event-handler/14058441#14058441 –