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


Оператор RaiseEvent

Вызывает событие, объявленное на уровне модуля в классе, форме или документе.

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() 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 обрабатывает события образом, отличным от формы.Чтобы разрешить форме непосредственно обрабатывать события, можно использовать многопоточность.Дополнительные сведения см. в разделе Работа с потоками (C# и Visual Basic).

См. также

Ссылки

Оператор Event

Оператор AddHandler

Оператор RemoveHandler

Предложение Handles (Visual Basic)

Другие ресурсы

События (Visual Basic)