Оператор RaiseEvent
Активирует событие, объявленное на уровне модуля в классе, форме или документе.
Синтаксис
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
. Дополнительные сведения о пользовательских событиях см . в инструкции event.
Пример 1
В следующем примере события используются для выполнения обратного отсчета от 10 до 0 секунд. Код иллюстрирует несколько методов, свойств и инструкций, связанных с событиями, включая инструкцию RaiseEvent
.
Класс, который вызывает событие, является источником события, а методы, обрабатывающие события, — обработчиками событий. Источник события может иметь несколько обработчиков для создаваемых им событий. Когда класс создает событие, это событие создается во всех классах, выбранных для обработки событий данного экземпляра объекта.
В примере также используется форма (Form1
) с кнопкой (Button1
) и текстовым полем (TextBox1
). При нажатии кнопки в первом текстовом поле отображается обратный отсчет от 10 до 0 секунд. По истечении всего времени (10 секунд) в первом текстовом поле отображается надпись Done.
Код для Form1
указывает начальное и конечное состояния формы. Он также содержит код, выполняемый при создании событий.
Чтобы использовать этот пример, откройте новый проект приложения Windows, добавьте кнопку с именем и текстовое поле с Form1
именем Button1
TextBox1
основной формы. Затем щелкните правой кнопкой мыши форму и щелкните "Просмотреть код ", чтобы открыть редактор кода.
WithEvents
Добавьте переменную в раздел объявлений Form1
класса.
Private WithEvents mText As TimerState
Пример 2
Добавьте следующий код в код для Form1
. Замените любые повторяющиеся процедуры, которые могут существовать, например Form_Load
или Button_Click
.
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Private Sub mText_ChangeText() Handles mText.Finished
TextBox1.Text = "Done"
End Sub
Private Sub mText_UpdateTime(ByVal Countdown As Double
) Handles mText.UpdateTime
TextBox1.Text = Format(Countdown, "##0.0")
' Use DoEvents to allow the display to refresh.
My.Application.DoEvents()
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Dim SoFar As Double = 0
Do While ElapsedTime < Duration
If ElapsedTime > SoFar + Increment Then
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
End If
ElapsedTime = DateAndTime.Timer - Start
Loop
RaiseEvent Finished()
End Sub
End Class
Нажмите клавишу F5, чтобы запустить предыдущий пример, и нажмите кнопку "Пуск". Первое текстовое поле начинает обратный отсчет. По истечении всего времени (10 секунд) в первом текстовом поле отображается надпись Done.
Примечание.
Метод My.Application.DoEvents
не обрабатывает события точно так же, как и форма. Чтобы форма обрабатывала события напрямую, можно использовать многопоточность. Дополнительные сведения см. в разделе "Управляемый поток".