Оператор RaiseEvent
Обновлен: Ноябрь 2007
Вызывает событие, объявленное на уровне модуля в классе, форме или документе.
RaiseEvent eventname[( argumentlist )]
Компоненты
eventname
Обязательный параметр. Имя вызываемого события.argumentlist
Необязательный атрибут. Список переменных, массивов и выражений, разделенных запятыми. Аргумент argumentlist должен быть заключен в круглые скобки. Если аргументы отсутствуют, скобки следует опустить.
Заметки
Обязательный элемент eventname представляет собой имя события, объявленного внутри модуля. Имя должно соответствовать стандартным правилам именования переменных
Если событие не описано в том модуле, в котором оно создается, возникает ошибка. В следующем фрагменте кода демонстрируется объявление события и процедура, в которой осуществляется вызов этого события.
' 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.
Пример
В следующем примере событие используется для обратного счета от 10 до 0 секунд. Код иллюстрирует некоторые из связанных методов, свойств и операторов события, включая оператор RaiseEvent.
Класс, инициирующий событие, является источником события, а методы, обрабатывающие событие, — его обработчиками. Источник события может иметь несколько обработчиков для создаваемых событий. Когда класс создает событие, это событие возникает во всех классах, выбранных для обработки событий данного экземпляра объекта.
В примере также используется форма (Form1) с кнопкой (Button1) и текстовое поле (TextBox1). По щелчку кнопки, первое текстовое поле отображает отсчет от 10 до 0 секунд. По истечении всего времени (10 секунд), первое текстовом поле отображает "Готово".
Код для Form1 задает начальное и конечное состояния формы. Там также содержится код, исполняемый при создании событий.
Чтобы использовать этот пример, откройте новый проект приложения Windows, добавьте кнопку с именем Button1 и текстовое поле с именем TextBox1 в главную форму с именем Form1. Затем щелкните правой кнопкой мыши на форме и выберите в меню пункт Просмотреть код . Откроется редактор кода.
Добавьте переменную WithEvents в раздел объявления класса Form1.
Private WithEvents mText As TimerState
Добавьте следующий код в код для Form1. Замените все возможные дубликаты процедур, например Form_Load или Button_Click.
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
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 секунд), первое текстовом поле отображает "Готово".
Примечание. |
---|
Метод My.Application.DoEvents обрабатывает события образом, отличным от формы. Чтобы разрешить форме непосредственно обрабатывать события, можно использовать многопотоковость. Дополнительные сведения см. в разделе Многопотоковость в Visual Basic. |
См. также
Задачи
Практическое руководство. Добавление событий в класс