Devo passare un evento come parametro a una funzione. C'è un modo per farlo?VB.NET - Passaggio di un evento come parametro
Il motivo è che ho una sequenza di due righe di codice che è disseminata in tutto il mio programma, in cui rimuovo il gestore dinamicamente a un evento, quindi imposto nuovamente il gestore. Lo sto facendo per diversi eventi e gestori di eventi, quindi ho deciso di scrivere una funzione che faccia questo.
Ad esempio, diciamo che ho una casella combinata nel mio codice chiamata combobox1 e ho il gestore chiamato indexChangedHandler. In diversi luoghi del mio codice, ho le seguenti due righe:
RemoveHandler combobox1.SelectedIndexChanged, AddressOf indexChangedHandler
AddHandler combobox1.SelectedIndexChanged, AddressOf indexChangedHandler
Ora, io non voglio continuare a ripetere queste due righe di codice (o simili) in tutto il mio programma, così ho' m alla ricerca di un modo per farlo:
Private Sub setHandler(evt As Event, hndler As eventhandler)
RemoveHandler evt, hndler
AddHandler evt, hndler
End Sub
in modo che tutto il mondo in cui quelle due righe di codice (o simili) si verificano nel mio programma, posso solo sostituirli con:
setHandler(combobox1.SelectedIndexChanged, AddressOf indexChangedHandler)
Finora , la parte "evt as Event" di a rgument della funzione setHandler sta dando un errore.
P.S: Ho fatto questa domanda su un paio di altri forum e continuo a chiedermi perché vorrei impostare il gestore immediatamente dopo averlo rimosso. Il motivo è perché l'aggiunta dinamica di un gestore di eventi n-times fa sì che il gestore venga eseguito n volte al verificarsi dell'evento. Per evitare ciò, cioè, per garantire che il gestore venga eseguito una sola volta quando si verifica l'evento, prima rimuovo il gestore ogni volta che voglio aggiungere il gestore in modo dinamico.
Si potrebbe chiedere perché il gestore verrà aggiunto più volte in primo luogo ... Il motivo è perché aggiungo il gestore solo dopo un evento particolare, ad esempio E1, nel mio modulo si è verificato (aggiungo il gestore all'interno del gestore dell'evento E1). E l'evento E1 può verificarsi più volte nel mio modulo. Se non rimuovo il gestore ogni volta prima di aggiungerlo di nuovo, il gestore viene aggiunto e quindi eseguito più volte.
In ogni caso, l'elaborazione che si verifica all'interno della funzione non è di estrema importanza per me in questo momento, ma piuttosto il solo mezzo per passare un evento come parametro.
Puoi farci sapere qual è l'errore? –
Non esiste un modo reale di farlo a livello di codice, poiché non è possibile passare i riferimenti a un membro evento. Inoltre, non sono esattamente sicuro di cosa debba fare setHandler ... puoi chiarire il motivo per cui dovresti rimuovere un gestore di eventi e poi aggiungerlo di nuovo? – cdhowie
@cdhowie Ero in procinto di modificare il mio post per spiegare perché avrei dovuto farlo, sono stato interrotto, sono tornato e ho completato il montaggio e l'invio, prima di rendermi conto che hai già fatto la domanda. Per farla breve, la ragione è ora inclusa nel post originale :) – Tracer