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


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

fwd3bwed.alert_note(ru-ru,VS.90).gifПримечание.

Не используемые совместно события не должны создаваться в конструкторе класса, в котором они объявлены. Хотя такие события не приводят к ошибкам во время выполнения, они могут не обнаруживаться соответствующими обработчиками событий. Для создания совместно используемых событий в конструкторе необходимо использовать модификатор 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 секунд), первое текстовом поле отображает "Готово".

fwd3bwed.alert_note(ru-ru,VS.90).gifПримечание.

Метод My.Application.DoEvents обрабатывает события образом, отличным от формы. Чтобы разрешить форме непосредственно обрабатывать события, можно использовать многопотоковость. Дополнительные сведения см. в разделе Многопотоковость в Visual Basic.

См. также

Задачи

Практическое руководство. Добавление событий в класс

Ссылки

Оператор Event

Оператор AddHandler

Оператор RemoveHandler

Handles

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

События в Visual Basic