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


Оператор Event

Объявляет определяемое пользователем событие.

[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
 [ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
   [ <attrlist> ] AddHandler(ByVal value As delegatename)
      [ statements ]
   End AddHandler
   [ <attrlist> ] RemoveHandler(ByVal value As delegatename)
      [ statements ]
   End RemoveHandler
   [ <attrlist> ] RaiseEvent(delegatesignature)
      [ statements ]
   End RaiseEvent
End Event

Части

Компонент

Описание

attrlist

Необязательный. Список атрибутов, которые применяются для данного события. Несколько атрибутов разделяются запятыми. Необходимо заключить Список атрибутов (Visual Basic) в угловые скобки ("<" и ">").

accessmodifier

Необязательный. Указывает, что код может иметь доступ к событию. Может принимать следующие значения:

  • Public — любой код, который имеет доступ к элементу, который объявляет, что может получить доступ к нему.

  • Protected — только код в пределах класса или производный класс может иметь доступ к нему.

  • Friend — только код в пределах одной и той же сборки имеет доступ к нему.

  • Private — только код внутри элемента, объявляющего событие, имеет к нему доступ.

Можно указать Protected Friend, чтобы разрешить доступ из кода класса события, производного класса или той же сборки.

Shared

Необязательный. Указывает, что это событие не связано ни с каким конкретным экземпляром класса или структуры.

Shadows

Необязательный. Указывает, что данное событие повторно объявляет и скрывает идентично именованный программный элемент, или набор перегружаемых элементов, в базовом классе. Можно скрыть любой тип объявленного элемента с помощью любого другого типа.

Скрытый элемент недоступен из производного класса, в котором он скрыт, за исключением местоположений, где он является недоступным. Например, если элемент Private скрывает элемент базового класса, код, который не имеет разрешения на доступ к элементу Private, обращается к элементу базового класса.

eventname

Обязательный. Имя события, удовлетворяющее обычным правилам именования переменных.

parameterlist

Необязательный. Список локальных переменных, предоставляющих параметры данного события. Необходимо заключить Список параметров (Visual Basic) в круглые скобки.

Implements

Необязательный. Указывает на то, что это событие реализует событие интерфейса.

implementslist

Параметр обязателен, если указано ключевое слово Implements. Список реализуемых процедур Sub. Несколько процедур разделяются запятыми:

реализуемая_процедура [ , реализуемая_процедура ... ]

Каждая процедура implementedprocedure имеет следующий синтаксис и составляющие:

interface.definedname

КомпонентОписание
interface Обязательный.Имя интерфейса, реализуемого процедурой, содержащей класс или структуру.
definedname Обязательный.Имя, под которым процедура определена в interface.Оно не обязано совпадать с name — именем, используемым этой процедурой для реализации определенной процедуры.

Custom

Обязательный. События, объявленные как Custom, должны определять пользовательские методы доступа AddHandler, RemoveHandler и RaiseEvent.

delegatename

Необязательный. Имя делегата, определяющего сигнатуру обработчика событий.

AddHandler

Обязательный. Объявляет метод доступа AddHandler, который задает инструкции для выполнения при добавлении обработчика событий — либо явно, с помощью инструкции AddHandler, либо неявно, с помощью предложения Handles.

End AddHandler

Обязательный. Завершает блок AddHandler.

value

Обязательный. Имя параметра.

RemoveHandler

Обязательный. Объявляет метод доступа RemoveHandler, который определяет выполняемые операторы при удалении обработчика событий с помощью инструкции RemoveHandler.

End RemoveHandler

Обязательный. Завершает блок RemoveHandler.

RaiseEvent

Обязательный. Объявляет метод доступа RaiseEvent, который определяет операторы, которые выполняются, когда событие происходит с использованием инструкции RaiseEvent. Как правило, вызывается список делегатов, обслуживаемый методами доступа AddHandler и RemoveHandler.

End RaiseEvent

Обязательный. Завершает блок RaiseEvent.

delegatesignature

Обязательный. Список параметров, соответствующий параметрам, требуемым делегатом delegatename. Необходимо заключить Список параметров (Visual Basic) в круглые скобки.

statements

Необязательный. Инструкции, содержащие тела методов AddHandler, RemoveHandler и RaiseEvent.

End Event

Обязательный. Завершает блок Event.

Заметки

После объявления событие для создания события используется оператор RaiseEvent. Обычное событие может быть объявлено и создано так, как показано в следующих фрагментах кода.

Public Class EventSource
    ' Declare an event.
    Public Event LogonCompleted(ByVal UserName As String)
    Sub CauseEvent()
        ' Raise an event on successful logon.
        RaiseEvent LogonCompleted("AustinSteele")
    End Sub
End Class

Примечание

Аргументы событий можно объявлять таким же образом, как аргументы процедур, за несколькими исключениями: события не могут иметь именованные аргументы, аргументы ParamArray или Optional.События не возвращают значений.

Для обработки событий необходимо связать его с подпрограммой обработчика событий с помощью оператора Handles или AddHandler. Сигнатуры подпрограммы и события должны совпадать. Для обработки совместно используемых событий необходимо использовать инструкцию AddHandler.

Можно использовать зарезервированное слово Event только на уровне модуля. Это означает, что контекст объявления для события должен быть классом, структурой, модулем или интерфейсом, и не может быть исходным файлом, пространством имен, процедурой или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию (Visual Basic).

В большинстве случаев для объявления события можно использовать первый предложенный в разделе "Синтаксис" этой темы синтаксис. Однако некоторые сценарии требуют наличия большего контроля над поведением события. Последний предложенный синтаксис в разделе "Синтаксис" этой темы, который использует ключевое слово Custom, обеспечивает этот контроль, позволяя определять пользовательские события. В пользовательском событии указывается, что конкретно происходит, когда в коде добавляется или удаляется обработчик событий или когда код вызывает событие. Примеры см. в разделах Практическое руководство. Объявление пользовательских событий для экономии памяти (Visual Basic) и Практическое руководство. Объявление пользовательских событий для предотвращения блокировки (Visual Basic).

Пример

В следующем примере используются события для отсчета от 10 до 0 секунд. В коде показаны некоторые связанные с событиями методы, свойства и операторы. Включая инструкцию RaiseEvent.

Класс, инициирующий событие, является источником события, а методы, обрабатывающие событие, — его обработчиками. Источник события может иметь несколько обработчиков для создаваемых событий. Когда класс создает событие, это событие возникает во всех классах, выбранных для обработки событий данного экземпляра объекта.

В примере также используется форма (Form1) с кнопкой (Button1) и текстовое поле (TextBox1). По щелчку кнопки, первое текстовое поле отображает отсчет от 10 до 0 секунд. По истечении всего времени (10 секунд), первое текстовом поле отображает "Готово".

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

Чтобы использовать этот пример, создайте новый проект Windows Forms. Затем добавьте кнопку с именем 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).

См. также

Задачи

Практическое руководство. Объявление пользовательских событий для экономии памяти (Visual Basic)

Практическое руководство. Объявление пользовательских событий для предотвращения блокировки (Visual Basic)

Ссылки

Оператор RaiseEvent

Оператор Implements

Оператор AddHandler

Оператор RemoveHandler

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

Оператор Delegate

Shared (Visual Basic)

Shadows (Visual Basic)

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

События (Visual Basic)