Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Обработка событий в VB



В 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 и MouseUp, имеют одинаковый тип объекта (MouseEventArgs) для второго параметра. Для этих типов событий можно использовать один и тот же обработчик событий. Для событий, передающих различные типы объектов события, необходимо создать отдельные обработчики событий. Например, событие TextChanged элемента управления TextBox передает универсальный объект события EventArgs, а событие MouseDown передает более специализированный объект события MouseEventArgs. Объект MouseEventArgs содержит свойства, связанные с событиями мыши, например Button, для определения того, какая кнопка была нажата; эти свойства не применяются к элементу управления TextBox и вызовут ошибку, если попытаться сослаться на них. Помимо концептуальных различий в обработке событий, в Visual Basic 2008 изменились имена и поведение отдельных событий для различных объектов. Обработчик событий — это метод, связанный с событием. При возникновении события выполняется код внутри обработчика событий. В каждом обработчике событий существует два параметра, которые позволяют правильно обработать событие. В следующем примере показан обработчик события Click для элемента управления Button.

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

End Sub

Первый параметр, sender, предоставляет ссылку на объект, вызвавший событие. Второй параметр, e, в примере передает объект, связанный с обрабатываемым событием. С помощью ссылки на свойства объекта (а также на его методы) можно получить сведения, например о расположении мыши в событиях, вызываемых с помощью мыши, или о данных, которые передаются в ходе событий, возникающих при перетаскивании. Обычно каждое событие создает обработчик событий с разными типами объекта события для второго параметра. Некоторые обработчики событий, например обработчики для событий MouseDown и MouseUp, имеют одинаковый тип объекта для второго параметра. Для этих типов событий можно использовать один и тот же обработчик событий. Можно также использовать один и тот же обработчик событий для обработки одного события для разных элементов управления. Например, при наличии в форме группы элементов управления RadioButton можно создать один обработчик для события Click и привязать событие Click каждого элемента управления к этому обработчику. Если ваш класс вызывает несколько событий, то компилятор создает одно поле для каждого экземпляра делегата события. Если количество событий велико, то расходы ресурсов на хранение одного поля для каждого делегата могут стать неприемлемыми. Для таких случаев в среде.NET Framework предоставляется конструкция, называемая свойствами события (пользовательские события в Visual Basic 2005), которую можно использовать вместе с другой структурой данных (по вашему выбору) для хранения делегатов события. Свойства событий состоят из объявлений событий, сопровождаемых методами доступа к событиям. Методы доступа к событиям представляют собой определяемые пользователем методы, позволяющие добавлять или удалять экземпляры делегата события из структуры данных хранения. Обратите внимание, что использование свойств события снижает быстродействие по сравнению с полями события, поскольку перед вызовом каждого делегата события необходимо извлечь его. Поэтому должен быть достигнут компромисс между занимаемой памятью и быстродействием. Если класс определяет множество событий, которые вызываются нечасто, то пользователь может реализовать свойства событий. Элементы управления Windows Forms и элементы управления сервера ASP.NET используют вместо полей событий свойства событий. Чтобы использовать свойства событий (пользовательских событий в Visual Basic 2005), определите свойства событий в классе, который вызывает события, а затем установите делегаты для свойств событий в классах, обрабатывающих события. Для реализации нескольких свойств событий в классе, этот класс должен внутри себя хранить и поддерживать делегата, определенного для каждого события. Обычным подходом является реализация коллекции делегатов, индексируемой ключом события. Для хранения делегатов для каждого события можно использовать класс EventHandlerList или реализовать свою собственную коллекцию. Класс коллекции должен предоставить методы для настройки, доступа и извлечения делегата обработчика событий по ключу события. Например, можно использовать класс Hashtable или создать пользовательский класс, производный от класса DictionaryBase. Детали реализации коллекции делегатов не должны быть обязательно открыты вне класса. Каждое свойство события внутри класса определяет методы доступа add и remove. Метод доступа add для свойства события добавляет экземпляр делегата в коллекцию делегатов. Метод доступа remove для свойства события удаляет экземпляр делегата из коллекции делегатов. Методы доступа к свойствам событий используют предопределенный ключ свойства события для добавления и удаления экземпляров из коллекции делегатов. Для обработки нескольких событий с помощью свойств событий: 1. Определите коллекцию делегатов внутри класса, вызывающего события. 2. Определите ключ для каждого события. 3. Определите свойства событий в классе, который вызывает события. 4. Используйте коллекцию делегатов для реализации методов добавления и удаления для свойств событий. 5. Используйте открытые свойства событий для добавления и удаления делегатов обработчиков событий в классах, которые обрабатывают события.





Дата публикования: 2015-02-18; Прочитано: 714 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...