Normalmente, questo dovrebbe essere fatto avendo un gestore per ogni logica.
void handleUppercase(object sender, EventArgs args)
{
// convert text to uppercase
}
void handleLength(object sender, EventArgs args)
{
// display length
}
// then assign those handlers properly
button1.OnClick += handleUppercase
button2.OnClick += handleLength
Inoltre, non avrai molta fortuna nel cambiare il codice per lingue diverse, perché le diverse lingue usano diversi framework UI. E ci sono troppe differenze tra questi quadri per consentire qualsiasi tipo di condivisione. Se vuoi avere lo stesso codice in diverse lingue, devi assicurarti che non dipenda da alcun framework specifico. Quali sono i framework dell'interfaccia utente.
Il caso è molto diverso quando si ha la stessa logica, ma su pulsanti diversi con parametri diversi. In questo caso, hai 2 opzioni di base.
Il primo è usare un approccio simile a quello che Robert suggerisce:
void handleUppercase(object sender, EventArgs args)
{
if (sender == buttonA) // do logic for first arguments
if (sender == buttonB) // do logic for second arguments
}
buttonA.OnClick += handleUppercase
buttonB.OnClick += handleUppercase
La seconda opzione è quella di parametrizzare il gestore stesso. In OOP, ciò potrebbe essere eseguito se il gestore era un comando . È sufficiente creare diverse istanze di comando con parametri diversi per ciascun pulsante. In modo funzionale, è possibile utilizzare applicazione parziale . Ma poiché C # non ha questo concetto, devi aiutare te stesso con lambda:
void handleUppercase(object sender, EventArgs evArgs, Argument arg)
{
// do logic for arg
}
buttonA.OnClick += (s, e) => { handleUppercase(s, e, arg1); }
buttonB.OnClick += (s, e) => { handleUppercase(s, e, arg2); }