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


События и обработка событий (для пользователей Visual Basic 6.0)

Обновлен: Ноябрь 2007

При наличии знаний о событиях и обработке событий в Visual Basic 6.0 модель событий в Visual Basic 2008 может сначала казаться запутанной, но в конечном итоге она проще и гораздо производительнее.

Концептуальные различия

В Visual Basic 6.0 события связаны с определенными объектами, и для них определен собственный код обработки событий. Например, в форме, содержащей кнопку и меню, для каждого из этих объектов имеется свое событие Click, и для каждого из них необходимо написать отдельный код в обработчике событий, даже если их функции полностью совпадают.

' Visual Basic 6.0 
Private Sub HelpButton_Click()
    HelpButton.Caption = "Help me!"
End Sub
Private Sub HelpMenu_Click()
    HelpMenu.Caption = "Help me!"
End Sub

В Visual Basic 2008 события связаны с обработчиками событий с помощью делегатов, благодаря чему можно создать один обработчик событий для нескольких объектов.

Private Sub HelpButton_Click(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles HelpButton.Click, HelpMenu.Click
    sender.Text = "Help me!"
End Sub

В приведенном выше примере обратите внимание, что объявление события содержит предложение Handles, определяющее, какие события будут обработаны. В данном случае — события Click для обоих объектов: HelpButton и HelpMenu. Объекты и события не должны быть одинакового типа; например, может быть единый обработчик событий, обрабатывающий события Click кнопки, события DoubleClick текстового поля и события Tick таймера.

Также обратите внимание, что объявление события содержит два параметра: ByVal sender As Object и ByVal e As System.EventArgs. Первый параметр, sender, предоставляет ссылку на объект, вызвавший событие. Второй параметр, e, в примере передает объект, связанный с обрабатываемым событием. С помощью ссылки на свойства объекта (а также на его методы) можно получить сведения, например о расположении мыши в событиях, вызываемых с помощью мыши, или о данных, которые передаются в ходе событий, возникающих при перетаскивании.

В следующем примере обработчик событий MouseDown использует параметр sender для определения типа объекта, который создал событие, и является ли этим объектом PictureBox, параметр e используется для перемещения метки в то место, где произошел щелчок мыши. Для дублирования этого примера добавьте в форму два элемента управления PictureBox и один элемент управления Label.

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown, _
PictureBox1.MouseDown, PictureBox2.MouseDown

    If TypeOf sender Is PictureBox Then
        Label1.Location = sender.Location + e.Location
    Else
        MsgBox("Please click a picture")
    End If
End Sub

Обычно каждое событие создает обработчик событий с разными типами объекта события для второго параметра. Некоторые обработчики событий, например обработчики событий MouseDown и MouseUp, имеют одинаковый тип объекта (MouseEventArgs) для второго параметра. Для этих типов событий можно использовать один и тот же обработчик событий.

Для событий, передающих различные типы объектов события, необходимо создать отдельные обработчики событий. Например, событие TextChanged элемента управления TextBox передает универсальный объект события EventArgs, а событие MouseDown передает более специализированный объект события MouseEventArgs. Объект MouseEventArgs содержит свойства, связанные с событиями мыши, например Button, для определения того, какая кнопка была нажата; эти свойства не применяются к элементу управления TextBox и вызовут ошибку, если попытаться сослаться на них.

Помимо концептуальных различий в обработке событий, в Visual Basic 2008 изменились имена и поведение отдельных событий для различных объектов. Дополнительные сведения см. в разделе Элементы управления Windows Forms (для пользователей Visual Basic 6.0).

См. также

Основные понятия

Обзор обработчиков событий (Windows Forms)

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

Создание обработчиков событий в Windows Forms