触发在类、窗体或文档中的模块级别声明的事件。
语法
RaiseEvent eventname[( argumentlist )]
部件
eventname
必填。 要触发的事件的名称。
argumentlist
可选。 以逗号分隔的变量、数组或表达式列表。 参数 argumentlist 必须用括号括起来。 如果没有参数,则必须省略括号。
注解
必需 eventname 是模块中声明的事件的名称。 它遵循 Visual Basic 变量命名约定。
如果引发事件的模块内尚未声明该事件,则会出现错误。 以下代码片段演示事件声明和引发事件的过程。
' 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
不能用于 RaiseEvent 引发未在模块中显式声明的事件。 例如,所有窗体都继承一Click个System.Windows.Forms.Form事件,不能在RaiseEvent派生窗体中引发该事件。 如果在窗体模块中声明事件 Click ,它将隐藏窗体自己的 Click 事件。 你仍可以通过调用该方法来调用Click窗体OnClick的事件。
默认情况下,在 Visual Basic 中定义的事件按建立连接的顺序引发其事件处理程序。 由于事件可以具有 ByRef 参数,因此延迟连接的进程可能会接收早期事件处理程序已更改的参数。 执行事件处理程序后,控件将返回到引发事件的子例程。
注释
不应在声明它们的类的构造函数中引发非共享事件。 尽管此类事件不会导致运行时错误,但它们可能无法由关联的事件处理程序捕获。
Shared如果需要从构造函数引发事件,请使用修饰符创建共享事件。
注释
可以通过定义自定义事件来更改事件的默认行为。 对于自定义事件,该 RaiseEvent 语句调用事件的 RaiseEvent 访问器。 有关自定义事件的详细信息,请参阅 事件语句。
示例 1
以下示例使用事件将秒数从 10 倒计时为 0。 该代码演示了多个与事件相关的方法、属性和语句,包括 RaiseEvent 语句。
引发事件的类是事件源,处理事件的方法是事件处理程序。 事件源可以为其生成的事件具有多个处理程序。 当类引发事件时,该事件在已选择处理该对象的实例的每个类上引发。
该示例演示了从 10 到 0 秒的计时器,并向控制台显示进度。 倒计时完成后,会显示“完成”。
在类中声明一个 WithEvents 变量以处理计时器中的事件:
Public Class TimerExample
Private WithEvents mTimer As TimerState
示例 2
添加以下代码来实现事件处理程序和计时器逻辑。 此示例演示如何使用 RaiseEvent 语句在计时器更新或完成时通知事件处理程序。
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
运行前面的示例时,它会开始将秒从 10 到 0 倒计时,并显示控制台的进度。 当全职(10 秒)已过时,它将显示“完成”。