Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Активирует событие, объявленное на уровне модуля в классе, форме или документе.
Синтаксис
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 секунд) истек, в первом текстовом поле отображается "Готово".
Код для 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 секунд) истек, в первом текстовом поле отображается "Готово".
Замечание
Метод My.Application.DoEvents
не обрабатывает события точно так же, как и форма. Чтобы форма обрабатывала события напрямую, можно использовать многопоточность. Для получения дополнительной информации см. Управляемая многозадачность.