Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Активирует событие, объявленное на уровне модуля в классе, форме или документе.
Синтаксис
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 .
Класс, который вызывает событие, является источником событий, а методы, обрабатывающие событие, являются обработчиками событий. Источник событий может содержать несколько обработчиков для событий, которые он создает. Когда класс вызывает событие, это событие вызывается на каждом классе, который выбрал для обработки событий для этого экземпляра объекта.
В примере показан таймер, который отсчитывается от 10 до 0 секунд и отображает ход выполнения в консоли. После завершения отсчета отображается значение "Готово".
Объявите WithEvents переменную в классе для обработки событий из таймера:
Public Class TimerExample
Private WithEvents mTimer As TimerState
Пример 2
Добавьте следующий код для реализации обработчиков событий и логики таймера. В этом примере показано, как использовать инструкцию RaiseEvent для уведомления обработчиков событий при обновлении или завершении таймера.
Public Sub StartCountdownExample()
mTimer = New TimerState()
mTimer.StartCountdown(10.0, 1.0)
End Sub
Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
End Sub
Private Sub mTimer_Finished() Handles mTimer.Finished
Console.WriteLine("Done")
End Sub
End Class
Public Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim SoFar As Double = 0
Do While SoFar < Duration
System.Threading.Thread.Sleep(CInt(Increment * 1000))
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
Loop
RaiseEvent Finished()
End Sub
End Class
При запуске предыдущего примера начинается подсчет секунд от 10 до 0, отображая ход выполнения в консоли. Когда полный рабочий день (10 секунд) истекает, отображается значение "Готово".