Compartir vía


RaiseEvent (instrucción)

Desencadena un evento declarado en el nivel de módulo dentro de una clase, formulario o documento.

Sintaxis

RaiseEvent eventname[( argumentlist )]  

Partes

eventname
Obligatorio. Nombre del evento que se va a desencadenar.

argumentlist
Opcional. Lista delimitada por comas de variables, matrices o expresiones. El argumentlist argumento debe estar entre paréntesis. Si no hay ningún argumento, se deben omitir los paréntesis.

Observaciones

El valor requerido eventname es el nombre de un evento declarado en el módulo. Sigue las convenciones de nomenclatura de variables de Visual Basic.

Si no se ha declarado el evento en el módulo que se ha producido, se generará un error. El fragmento de código siguiente muestra una declaración de evento y un procedimiento en el que se genera el evento.

' Declare an event at module level.
Event LogonCompleted(ByVal UserName As String)

Sub Logon(ByVal UserName As String)
    ' Raise the event.
    RaiseEvent LogonCompleted(UserName)
End Sub

No se puede usar RaiseEvent para generar eventos que no se declaran explícitamente en el módulo. Por ejemplo, todos los formularios heredan un Click evento de System.Windows.Forms.Form, no se puede generar mediante RaiseEvent en un formulario derivado. Si declara un Click evento en el módulo de formulario, sombrea el propio Click evento del formulario. Todavía puede invocar el evento del Click formulario llamando al OnClick método .

De forma predeterminada, un evento definido en Visual Basic genera sus controladores de eventos en el orden en que se establecen las conexiones. Dado que los eventos pueden tener ByRef parámetros, un proceso que se conecta tarde puede recibir parámetros modificados por un controlador de eventos anterior. Una vez ejecutados los controladores de eventos, el control se devuelve a la subrutina que generó el evento.

Nota:

Los eventos no compartidos no deben generarse dentro del constructor de la clase en la que se declaran. Aunque estos eventos no provocan errores en tiempo de ejecución, es posible que no se detecten mediante controladores de eventos asociados. Use el Shared modificador para crear un evento compartido si necesita generar un evento a partir de un constructor.

Nota:

Puede cambiar el comportamiento predeterminado de los eventos definiendo un evento personalizado. Para eventos personalizados, la RaiseEvent instrucción invoca el descriptor de acceso del RaiseEvent evento. Para obtener más información sobre los eventos personalizados, vea Event Statement.

Ejemplo 1

En el ejemplo siguiente se usan eventos para contar los segundos de 10 a 0. El código muestra varios de los métodos, propiedades e instrucciones relacionados con eventos, incluida la RaiseEvent instrucción .

La clase que genera un evento es el origen del evento y los métodos que procesan el evento son los controladores de eventos. Un origen de eventos puede tener varios controladores para los eventos que genera. Cuando la clase genera el evento, ese evento se genera en cada clase que ha elegido controlar eventos para esa instancia del objeto.

En el ejemplo se muestra un temporizador que cuenta de 10 a 0 segundos y muestra el progreso en la consola. Cuando finaliza la cuenta atrás, muestra "Listo".

Declare una WithEvents variable en la clase para controlar eventos desde el temporizador:

Public Class TimerExample
    Private WithEvents mTimer As TimerState

Ejemplo 2

Agregue el código siguiente para implementar los controladores de eventos y la lógica del temporizador. En este ejemplo se muestra cómo usar la RaiseEvent instrucción para notificar a los controladores de eventos cuando el temporizador se actualiza o se completa.

    Public Sub StartCountdownExample()
        mTimer = New TimerState()
        mTimer.StartCountdown(10.0, 1.0)
    End Sub

    Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
        Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
    End Sub

    Private Sub mTimer_Finished() Handles mTimer.Finished
        Console.WriteLine("Done")
    End Sub
End Class

Public Class TimerState
    Public Event UpdateTime(ByVal Countdown As Double)
    Public Event Finished()
    Public Sub StartCountdown(ByVal Duration As Double,
                              ByVal Increment As Double)
        Dim SoFar As Double = 0
        Do While SoFar < Duration
            System.Threading.Thread.Sleep(CInt(Increment * 1000))
            SoFar += Increment
            RaiseEvent UpdateTime(Duration - SoFar)
        Loop
        RaiseEvent Finished()
    End Sub
End Class

Al ejecutar el ejemplo anterior, comienza a contar los segundos de 10 a 0, mostrando el progreso en la consola. Cuando ha transcurrido el tiempo completo (10 segundos), se muestra "Listo".

Consulte también