Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Запускает событие, объявленное на уровне модуля в классе, форме или документе.
Синтаксис
Имя события RaiseEvent [ ( argumentlist ) ]
Обязательный элемент eventname — название события, объявленного в модуле, соответствующее правилам именования переменных в Basic.
Синтаксис оператора RaiseEvent состоит из таких частей:
| Part | Описание |
|---|---|
| eventname | Обязательно. Название вызываемого события. |
| список аргументов | Необязательный параметр. Список переменных, массивов или выражений с разделителями-запятыми. Список аргументов должен быть заключен в круглые скобки. Если аргументы отсутствуют, скобки должны быть опущены. |
Замечания
Если событие не было объявлено в модуле, в котором оно вызывается, возникает ошибка. В следующем примере показано объявление переменной и процедура, в которой вызывается событие.
' Declare an event at module level of a class module
Event LogonCompleted (UserName as String)
Sub Demo()
' 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 и обратная связь.