Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - 5acredphoenix -

Visual Basic .NET - Элементы управления Windows

Все примеры / Интерфейс / Элементы управления Windows

Как «переопределить» обработчик определённого события у контрола

Автор: 5acredphoenix | добавлено: 06.03.2010, 14:18 | просмотров: 1718 (1+) | комментариев: 0 | рейтинг: *x0
Иногда возникает такая ситуация: лежит, например, на форме кнопка, выполняющая определённые действия. А нам нужно изменить её поведение. Что делать? Верно, повесить свой обработчик события на нажатие и убрать тот, что стоял раньше. Вот со вторым пунктом-то и возникают проблемы, если нет ссылки на текущий обработчик события.
Данный пример показывает обходной путь для решения проблемы.

Код

Imports System.Reflection
Imports System.ComponentModel

Public Class Form1

  Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
   MsgBox("Inside default handler", MsgBoxStyle.Information, "Information")
  End Sub

  Private Sub Button1_AnotherClick(ByVal sender As Object, ByVal e As EventArgs)
   MsgBox("Inside our own event handler ^_^", MsgBoxStyle.Information, "Information")
  End Sub

  Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
   RemoveEventHandlers(Button1, "Click")
   AddHandler Button1.Click, AddressOf Button1_AnotherClick
   Button2.Enabled = False
  End Sub

  Private Sub RemoveEventHandlers(ByVal ctrl As Control, ByVal [event] As String)
   Dim eventsProperty = ctrl.GetType().GetProperty("Events", BindingFlags.NonPublic Or BindingFlags.Instance)
   Dim handlerList = DirectCast(eventsProperty.GetValue(ctrl, Nothing), EventHandlerList)
   Dim eventClick = GetType(Control).GetField(String.Format("Event{0}", [event]), BindingFlags.NonPublic Or BindingFlags.Static).GetValue(ctrl)
   handlerList(eventClick) = Nothing
  End Sub

End Class
Об авторе

5acredphoenix

Нет информации об авторе...

См. также:
Профиль автора
5acredphoenix
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Реклама
Счетчики