Necesito pasar un evento como parámetro a una función. ¿Hay alguna forma de hacer esto?VB.NET - Pasar un evento como un parámetro
La razón es que tengo una secuencia de dos líneas de código dispersas por todo mi programa, donde elimino dinámicamente el controlador de un evento y luego establezco el controlador nuevamente. Estoy haciendo esto para varios eventos diferentes y manejadores de eventos, así que he decidido escribir una función que lo haga.
Como ejemplo, digamos que tengo un cuadro combinado en mi código llamado combobox1, y tengo el controlador llamado indexChangedHandler. En varios lugares de mi código, tienen las siguientes dos líneas:
RemoveHandler combobox1.SelectedIndexChanged, AddressOf indexChangedHandler
AddHandler combobox1.SelectedIndexChanged, AddressOf indexChangedHandler
Ahora, yo no quiero seguir repitiendo las dos líneas anteriores de código (o similar) por todo el programa, por lo que' m en busca de una manera de hacer esto:
Private Sub setHandler(evt As Event, hndler As eventhandler)
RemoveHandler evt, hndler
AddHandler evt, hndler
End Sub
por lo que en todas partes donde las dos líneas de código (o similar) se producen en mi programa, sólo puede sustituirlos por:
setHandler(combobox1.SelectedIndexChanged, AddressOf indexChangedHandler)
hasta ahora , la parte "evt como evento" del El argumento de la función setHandler está dando un error.
P.S: He hecho esta pregunta en otros foros y me siguen preguntando por qué querría configurar el controlador inmediatamente después de eliminarlo. La razón es porque dinámicamente agregar un controlador de eventos n veces hace que el controlador se ejecute n veces cuando se produce el evento. Para evitar esto, es decir, para garantizar que el controlador se ejecute solo una vez cuando se produce el evento, primero elimino el controlador cada vez que deseo agregar el controlador dinámicamente.
Es posible que se pregunte por qué el controlador se agregará varias veces en primer lugar ... La razón es porque agrego el controlador solo después de un evento en particular, digamos E1, en mi forma se ha producido (agrego el controlador dentro del controlador del evento E1). Y el evento E1 puede ocurrir varias veces dentro de mi formulario. Si no elimino el controlador cada vez que lo vuelvo a agregar, el controlador se agrega y, por lo tanto, se ejecuta varias veces.
En cualquier caso, el procesamiento que se produce dentro de la función no es de importancia fundamental para mí en este momento, sino más bien el único medio para pasar un evento como parámetro.
¿Puede decirnos cuál es el error? –
No hay una manera real de hacerlo programáticamente, ya que no puede pasar referencias a un miembro de evento. Tampoco estoy exactamente seguro de qué se supone que haga SetHandler ... ¿puedes aclarar por qué necesitarías eliminar un controlador de eventos y luego volver a agregarlo? – cdhowie
@cdhowie Estaba en el proceso de editar mi publicación para explicar por qué tendría que hacer esto, me interrumpieron, volví y completé la edición y la envié, antes de darme cuenta de que ya había hecho la pregunta. En resumen, la razón ahora está incluida en la publicación original :) – Tracer