tiempo que manejo eventos evento ejecucion crear control winforms events user-controls delegates event-bubbling

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.