Ho avuto difficoltà a capire l'esempio di @ spender in particolare con: Object.assignHandler((sender) => evHandler(sender,someData));
perché non esiste una cosa come Object.assignHandler
in senso letterale. Così ho fatto un po 'di più su Google e ho trovato this example. La risposta di Peter Duniho era quello che scattò nella mia testa (questo non è il mio lavoro):
snip
L'approccio comune è quello di utilizzare un metodo anonimo con un gestore di eventi che ha il vostro modificata firma. Per esempio:
void Onbutton_click(object sender, EventArgs e, int i) { ... }
button.Click += delegate(object sender, EventArgs e)
{ Onbutton_click(sender, e, 172); };
Naturalmente, non c'è bisogno di passare in 172, o anche fare il terzo parametro un int. :)
/snip
Utilizzando questo esempio sono stato in grado di passare in due personalizzato ComboBoxItem
oggetti a un Timer.Elapsed
evento utilizzando lambda notazione:
simulatorTimer.Elapsed +=
(sender, e) => onTimedEvent(sender, e,
(ComboBoxItem) cbPressureSetting.SelectedItem,
(ComboBoxItem) cbTemperatureSetting.SelectedItem);
e poi in esso del conduttore:
static void onTimedEvent(object sender, EventArgs e, ComboBoxItem pressure, ComboBoxItem temperature)
{
Console.WriteLine("Requested pressure: {0} PSIA\nRequested temperature: {1}° C", pressure, temperature);
}
Questo non è un nuovo codice dagli esempi sopra, ma dimostra devo interpretarli Spero che qualcuno come me trovi utile & così da non passare ore a cercare di capire il concetto come ho fatto io.
Questo codice funziona nel mio progetto (ad eccezione di un'eccezione non thread-safe con gli oggetti ComboBoxItem
che non credo cambia come funziona l'esempio). Lo sto capendo adesso.
ho una soluzione più standard in questa domanda, prima risposta http://stackoverflow.com/questions/14058412/passing-parameter-to-an-event-handler/14058441#14058441 –