Оператор RaiseEvent

Запускает событие, объявленное на уровне модуля в классе, форме или документе.

Синтаксис

Имя события RaiseEvent [ ( argumentlist ) ]

Обязательный элемент eventname — название события, объявленного в модуле, соответствующее правилам именования переменных в Basic.

Синтаксис оператора RaiseEvent состоит из таких частей:

Part Описание
eventname Обязательно. Название вызываемого события.
список аргументов Необязательный параметр. Список переменных, массивов или выражений с разделителями-запятыми. Список аргументов должен быть заключен в круглые скобки. Если аргументы отсутствуют, скобки должны быть опущены.

Замечания

Если событие не было объявлено в модуле, в котором оно вызывается, возникает ошибка. В следующем примере показано объявление переменной и процедура, в которой вызывается событие.

' Declare an event at module level of a class module 
Event LogonCompleted (UserName as String) 
 
Sub 
 ' Raise the event. 
 RaiseEvent LogonCompleted ("AntoineJan") 
End Sub

Если у события нет аргументов, включая пустые скобки в вызове RaiseEvent события, возникает ошибка. RaiseEvent невозможно использовать для вызова событий, которые не были явно объявлены в модуле.

Например, если в форме есть событие Click , ее событие Click можно запустить с помощью RaiseEvent. Если объявить событие Click в модуле формы, оно затеняет собственное событие Click формы. По-прежнему можно вызвать событие Click формы, используя обычный синтаксис для вызова события, но не с помощью оператора RaiseEvent .

Вызов события осуществляется в порядке установления связей. Так как события могут иметь параметры ByRef , процесс, который подключается поздно, может получать параметры, которые были изменены более ранним обработчиком событий.

Пример

В следующем примере события используются для отсчета секунд во время демонстрации самой быстрой гонки на 100 метров. Код показывает все методы, свойства и операторы, связанные с событиями, в том числе оператор RaiseEvent.

Класс, породивший событие, является источником этого события, а классы, реализовавшие событие, являются приемниками. У источника события может быть несколько приемников для созданных им событий. Когда класс порождает событие, это событие запускается в каждом классе, выбранном для приема событий для этого экземпляра объекта.

В примере также используется форма (Form1) с кнопкой (Command1), меткой (Label1) и двумя текстовыми полями (Text1 и Text2). При нажатии кнопки в первом текстовом поле отображается значение От сейчас , а второе начинает отсчитывать секунды. По истечении полного времени (9,58 секунды) в первом текстовом поле отображается значение "До сих пор ", а во втором — 9,58.

Код задает начальное и конечное состояния формы. Он также содержит код, выполняемый при порождении события.

Option Explicit

Private WithEvents ts As TimerState
Private Const FinalTime As Double = 9.58

Private Sub UserForm_Initialize()
    Command1.Caption = "Click to start timer"
    Text1.Text = vbNullString
    Text2.Text = vbNullString
    Label1.Caption = "The fastest 100 meters ever run took this long:"
    Set ts = New TimerState
End Sub

Private Sub Command1_Click()
    Text1.Text = "From Now"
    Text2.Text = "0"
    ts.TimerTask FinalTime
End Sub

Private Sub ts_UpdateElapsedTime(ByVal elapsedTime As Double)
    Text2.Text = CStr(Format(elapsedTime, "0.00"))
End Sub

Private Sub ts_DisplayFinalTime()
    Text1.Text = "Until now"
    Text2.Text = CStr(FinalTime)
End Sub

Остальной код содержится в модуле класса, названном TimerState. Помимо команд в код включены операторы Raise Event.

Option Explicit

Public Event UpdateElapsedTime(ByVal elapsedTime As Double)
Public Event DisplayFinalTime()
Private Const delta As Double = 0.01

Public Sub TimerTask(ByVal duration As Double)
    Dim startTime As Double
    startTime = Timer
    Dim timeElapsedSoFar As Double
    timeElapsedSoFar = startTime
    
    Do While Timer < startTime + duration
        If Timer - timeElapsedSoFar >= delta Then
            timeElapsedSoFar = timeElapsedSoFar + delta
            RaiseEvent UpdateElapsedTime(Timer - startTime)
            DoEvents
        End If
    Loop
    
    RaiseEvent DisplayFinalTime
End Sub

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.