winforms - que - manejo de eventos en c#
Cómo exponer y generar eventos personalizados para un control de usuario de vb.net winforms (2)
Si desea lo mismo que en la otra publicación que mencionó, aquí está el equivalente de VB.NET:
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
AddHandler SaveButton.Click, value
End AddHandler
RemoveHandler(ByVal value As EventHandler)
RemoveHandler SaveButton.Click, value
End RemoveHandler
End Event
Pero no creo que sea una buena idea, porque el parámetro sender
del evento será el Button
, no su UserControl
...
En cambio, podría suscribirse al evento Button.Click y plantear su propio evento (sin accesadores explícitos)
Por favor, lea ESTA publicación. Tengo el mismo problema que el descrito en esta publicación pero estoy tratando de hacerlo en VB.net en lugar de c #.
Estoy bastante seguro de hacer esto. Tengo que usar un evento personalizado. (Utilicé un sitio de conversión de código para obtener información acerca de los eventos personalizados.) Entonces en el IDE cuando escribo lo siguiente:
Evento personalizado público AddRemoveAttendees As EventHandler
Se expande al siguiente fragmento de código.
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
End RaiseEvent
End Event
Pero no puedo entender qué hacer con eso. Hasta hoy nunca había oído hablar de eventos personalizados.
La conclusión de lo que quiero es hacer que el evento de clic de un botón salte al contenedor del control de usuario. Sé que podría envolver mi propio evento, pero al menos me gustaría entender los eventos personalizados antes de ir más allá en ese camino.
Seth
Para usar eventos personalizados para burbujear los eventos de otro control, puede hacer esto:
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
AddHandler _theButton.Click, value
End AddHandler
RemoveHandler(ByVal value As EventHandler)
RemoveHandler _theButton.Click, value
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
'' no need to do anything in here since you will actually ''
'' not raise this event; it only acts as a "placeholder" for the ''
'' buttons click event ''
End RaiseEvent
End Event
En AddHandler
y RemoveHandler
simplemente propaga la llamada para adjuntar o eliminar el controlador de eventos dado hacia / desde el evento Click
del control.
Para ampliar un poco el uso de eventos personalizados, aquí hay otra implementación de muestra de un evento personalizado:
Dim _handlers As New List(Of EventHandler)
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
_handlers.Add(value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
If _handlers.Contains(value) Then
_handlers.Remove(value)
End If
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
For Each handler As EventHandler In _handlers
Try
handler.Invoke(sender, e)
Catch ex As Exception
Debug.WriteLine("Exception while invoking event handler: " & ex.ToString())
End Try
Next
End RaiseEvent
End Event
Ahora, como se ve arriba, hace poco más que una declaración de evento regular:
Public Event AddRemoveAttendees As EventHandler
Proporciona un mecanismo similar que permite adjuntar y eliminar controladores de eventos, y para que el evento se levante. Lo que el evento personalizado agrega es un nivel extra de control; puedes escribir algún código sobre cómo agregar, quitar y subir el evento, en el que puedes aplicar las reglas y modificar lo que sucederá un poco. Por ejemplo, es posible que desee limitar el número de controladores de eventos que están adjuntos a su evento. Para lograr eso, puede modificar la sección AddHandler
del ejemplo anterior:
AddHandler(ByVal value As EventHandler)
If _handlers.Count < 8 Then
_handlers.Add(value)
End If
End AddHandler
Si no necesita ese tipo de control detallado, no veo la necesidad de declarar eventos personalizados.