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


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

Примечание.

Метод My.Application.DoEvents не обрабатывает события точно так же, как и форма. Чтобы форма обрабатывала события напрямую, можно использовать многопоточность. Дополнительные сведения см. в разделе "Управляемый поток".

См. также