2009-07-03 23 views
5

Lea THIS mensaje. Tengo el mismo problema que el descrito en esta publicación pero estoy tratando de hacerlo en VB.net en lugar de C#.Cómo exponer y generar eventos personalizados para un usuario de vb.net winforms control

Estoy bastante seguro de hacer esto Tengo que usar un evento personalizado. (He usado un code conversion site para llegar a aprender acerca de los eventos personalizados.) Así que en el IDE cuando escribo lo siguiente:

AddRemoveAttendees Pública de eventos personalizado como manejador de sucesos

se expande hasta el 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 sé qué hacer con él. Hasta hoy nunca había oído hablar de eventos personalizados.

Lo que quiero decir es que el evento de clic de un botón burbujee hasta el 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

Respuesta

7

Para usar eventos personalizados para el burbujeo de los acontecimientos de otro control, puede hacerlo de esta manera:

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 propagar la llamada a fijar o quitar el evento dado manejador desde/hacia el evento Click del control.

Para ampliar un poco sobre el uso de eventos personalizados, aquí es otro ejemplo de implementación 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, que hace poco más que una declaración evento regular:

Public Event AddRemoveAttendees As EventHandler 

proporciona un mecanismo similar para permitir que los controladores de eventos que se adjunta y eliminado, y para el evento a ser elevado. 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 que se 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 usted no necesita ese tipo de control detallada, no veo la necesidad de declarar los eventos personalizados.

5

Si quiere lo mismo que en el otro post mencionado, esto es el equivalente 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 ...

su lugar, puede suscribirse al evento Button.Click y se eleva propio evento (sin descriptores de acceso explícitas)

+0

Gracias por su respuesta ... me dio el bandera de respuesta a la fi primera publicación por su minuciosidad, pero votó a favor su respuesta. Decidí ajustar el control en delegados estándar y eventos dentro del control para que el control del usuario emita los eventos en lugar del control chilc ... según su sugerencia. Gracias. Seth –

Cuestiones relacionadas