Оператор Event

Объявляет пользовательское событие.

Синтаксис

[ Public ] Eventprocedurename [ (arglist) ]

Синтаксис оператора Event состоит из следующих частей:

Part Описание
Public Необязательный параметр. Указывает, что событие отображается во всем проекте. Типы Events по умолчанию имеют значение Public. Обратите внимание на то, что эти события могут возникать только в том модуле, в котором они объявлены.
имя_процедуры Обязательно. Имя события; соответствует стандартным соглашениям об именовании переменных.

Аргумент arglist имеет следующий синтаксис и элементы:

[ ByVal | ByRef ] varname [ ( ) ] [ Astype ]

Part Описание
ByVal Необязательный параметр. Указывает, что аргумент передается значением.
ByRef Необязательный параметр. Указывает, что аргумент передается по ссылке. ByRef является значением по умолчанию в Visual Basic.
варнаме Обязательно. Имя переменной, представляющее аргумент, который передается в процедуру; соответствует стандартным соглашениям об именовании переменных.
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 и обратная связь.