Поделиться через


Оператор 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 секунд) истек, в первом текстовом поле отображается "Готово".

Код для Form1 указания начальных и конечных состояний формы. Он также содержит код, выполняемый при порождении события.

Чтобы использовать этот пример, откройте новый проект приложения Windows, добавьте кнопку с именем и текстовое поле с Form1именем Button1TextBox1 основной формы. Затем щелкните правой кнопкой мыши форму и щелкните "Просмотреть код ", чтобы открыть редактор кода.

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 не обрабатывает события точно так же, как и форма. Чтобы форма обрабатывала события напрямую, можно использовать многопоточность. Для получения дополнительной информации см. Управляемая многозадачность.

См. также