Оператор Event
Объявляет пользовательское событие.
Синтаксис
[ Public ] Eventprocedurename [ (arglist) ]
Синтаксис оператора Event состоит из следующих частей:
Part | Описание |
---|---|
Public | Необязательный параметр. Указывает, что событие отображается во всем проекте. Типы Events по умолчанию имеют значение Public. Обратите внимание на то, что эти события могут возникать только в том модуле, в котором они объявлены. |
имя_процедуры | Обязательно. Имя события; соответствует стандартным соглашениям об именовании переменных. |
Аргумент arglist имеет следующий синтаксис и элементы:
[ ByVal | ByRef ] varname [ ( ) ] [ Astype ]
Part | Описание |
---|---|
ByVal | Необязательный параметр. Указывает, что аргумент передается значением. |
ByRef | Необязательный параметр. Указывает, что аргумент передается по ссылке. ByRef используется по умолчанию в VBA, в отличие от Visual Basic .NET. |
varname | Обязательно. Имя переменной, представляющее аргумент, который передается в процедуру; соответствует стандартным соглашениям об именовании переменных. |
type | Необязательный параметр. Тип данных аргумента, передаваемого в процедуру; может быть Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только переменная длина), Object, Variant, пользовательским типом или типом объекта. |
Замечания
После объявления события используйте оператор RaiseEvent для запуска события. Ошибка синтаксиса возникает в том случае, если объявление Event производится в стандартном модуле. Событие нельзя объявить для возврата значения. Типичное событие можно объявить и вызвать, как показано в следующих фрагментах.
' Declare an event at module level of a class module
Event LogonCompleted (UserName as String)
Sub
RaiseEvent LogonCompleted("AntoineJan")
End Sub
Примечание.
Вы можете объявлять аргументы события точно так же, как и аргументы процедур, со следующими исключениями: события не могут иметь именованные аргументы, аргументы Optional или аргументы ParamArray. События не имеют возвращаемых значений.
Пример
В следующем примере события используются для отсчета секунд во время демонстрации самой быстрой гонки на 100 метров. Этот код иллюстрирует все связанные с событиями методы, свойства и операторы, включая оператор Event.
Класс, породивший событие, является источником этого события, а классы, реализовавшие событие, являются приемниками. У источника события может быть несколько приемников для созданных им событий. Когда класс порождает событие, это событие запускается в каждом классе, выбранном для приема событий для этого экземпляра объекта.
В примере также используется форма (Form1
) с кнопкой (Command1
), меткой (Label1
) и двумя текстовыми полями (Text1
и Text2
). При нажатии кнопки в первом текстовом поле отображается текст "From Now" ("С этого момента"), а во втором поле начинается отсчет секунд. По истечении полного времени (9,84 секунды) в первом текстовом поле отображается "До сих пор", а во втором — "9,84".
Код задает начальное и конечное состояния формы. Он также содержит код, выполняемый при порождении события.
Option Explicit
Private WithEvents mText As TimerState
Private Sub Command1_Click()
Text1.Text = "From Now"
Text1.Refresh
Text2.Text = "0"
Text2.Refresh
Call mText.TimerTask(9.84)
End Sub
Private Sub Form_Load()
Command1.Caption = "Click to Start Timer"
Text1.Text = ""
Text2.Text = ""
Label1.Caption = "The fastest 100 meter run took this long:"
Set mText = New TimerState
End Sub
Private Sub mText_ChangeText()
Text1.Text = "Until Now"
Text2.Text = "9.84"
End Sub
Private Sub mText_UpdateTime(ByVal dblJump As Double)
Text2.Text = Str(Format(dblJump, "0"))
DoEvents
End Sub
Оставшийся код находится в модуле класса с именем TimerState. Операторы Event объявляют процедуры, инициированные при порождении событий.
Option Explicit
Public Event UpdateTime(ByVal dblJump As Double)
Public Event ChangeText()
Public Sub TimerTask(ByVal Duration As Double)
Dim dblStart As Double
Dim dblSecond As Double
Dim dblSoFar As Double
dblStart = Timer
dblSoFar = dblStart
Do While Timer < dblStart + Duration
If Timer - dblSoFar >= 1 Then
dblSoFar = dblSoFar + 1
RaiseEvent UpdateTime(Timer - dblStart)
End If
Loop
RaiseEvent ChangeText
End Sub
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.