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
Necesario. Nombre del evento que se desencadenará.
argumentlist
Opcional. Lista delimitada por comas de variables, matrices o expresiones. El argumentlist argumento debe ir entre paréntesis. Si no hay ningún argumento, se deben omitir los paréntesis.
Comentarios
El requerido eventname es el nombre de un evento declarado dentro del módulo. Sigue las Visual Basic de nomenclatura de variables.
Si el evento no se ha declarado dentro del módulo en el que se genera, se produce 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 RaiseEvent usar para generar eventos que no se declaran explícitamente en el módulo. Por ejemplo, todos los formularios Click heredan un evento System.Windows.Forms.Form de , no se puede generar mediante en un formulario RaiseEvent derivado. Si declara un Click evento en el módulo de formulario, este sombreado el propio evento del Click formulario. Todavía puede invocar el evento del Click formulario llamando al método OnClick .
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 parámetros, un proceso que se conecta en tiempo de finalización puede recibir parámetros que un controlador de eventos anterior ha ByRef cambiado. Una vez ejecutados los controladores de eventos, el control se devuelve a la subrutina que ha producido 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, pueden no ser detectados por los controladores de eventos asociados. Use el Shared modificador para crear un evento compartido si necesita generar un evento desde un constructor.
Nota
Puede cambiar el comportamiento predeterminado de los eventos definiendo un evento personalizado. Para los eventos RaiseEvent personalizados, la instrucción invoca el RaiseEvent accessor del 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 provoca 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 eligió controlar eventos para esa instancia del objeto.
El ejemplo también usa un formulario (Form1) con un botón (Button1) y un cuadro de texto (TextBox1). Al hacer clic en el botón, el primer cuadro de texto muestra una cuenta atrás de 10 a 0 segundos. Cuando transcurre el tiempo (10 segundos), el primer cuadro de texto muestra "Done".
El código de Form1 especifica los estados inicial y terminal del formulario. También contiene el código que se ejecuta cuando se producen eventos.
Para usar este ejemplo, abra un nuevo proyecto Windows Aplicación, agregue un botón denominado y un cuadro de texto denominado al Button1 TextBox1 formulario principal, denominado Form1 . A continuación, haga clic con el botón derecho en el formulario y haga clic en Ver código para abrir el Editor de código.
Agregue una WithEvents variable a la sección declarations de la clase Form1 .
Private WithEvents mText As TimerState
Ejemplo 2
Agregue el código siguiente al código de Form1. Reemplace los procedimientos duplicados que puedan existir, como Form_Load o Button_Click .
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Private Sub mText_ChangeText() Handles mText.Finished
TextBox1.Text = "Done"
End Sub
Private Sub mText_UpdateTime(ByVal Countdown As Double
) Handles mText.UpdateTime
TextBox1.Text = Format(Countdown, "##0.0")
' Use DoEvents to allow the display to refresh.
My.Application.DoEvents()
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Dim SoFar As Double = 0
Do While ElapsedTime < Duration
If ElapsedTime > SoFar + Increment Then
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
End If
ElapsedTime = DateAndTime.Timer - Start
Loop
RaiseEvent Finished()
End Sub
End Class
Presione F5 para ejecutar el ejemplo anterior y haga clic en el botón con la etiqueta Iniciar. El primer cuadro de texto empieza la cuenta atrás de los segundos. Cuando transcurre el tiempo (10 segundos), el primer cuadro de texto muestra "Done".
Nota
El My.Application.DoEvents método no procesa eventos exactamente de la misma manera que lo hace el formulario. Para permitir que el formulario controle los eventos directamente, puede usar multithreading. Para obtener más información, vea Managed Threading.