2010-07-28 2 views
0

Я думал о моих опциях, когда дело касается событий в vb.net. Что я хотел бы сделать, это отслеживать события, которые запускаются в приложении, без явного объявления их с помощью «ручек». Вот псевдо-код:Вопрос о событиях в vb.net

Private Sub HandlesAllEvents(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles all.events 
    Select Case sender 
     Case button1 
      If event = click Then 
       doSomething() 
      End If 
    End Select 
End Sub 

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

мне нужен какой-то способ, чтобы один дескриптор объекта события обжигали в других объектах без специальных подразделов, то AddHandler проходит долгий путь, но я не могу использовать, динамически так:

Public Sub AddEvent(event as System.EventArgs) 
    AddHandler event AddressOf doSomething() 
End Sub 

Какой будет называться с:

Objec.AddEvent(form1.button1.Click) 

Имею ли я смысл здесь? Вы знаете, о чем я говорю? Вы знаете, как это сделать? Любая помощь ценится!

+0

неважно ... Я думаю, что могу просто использовать шаблон посредника – 170

ответ

1

Предисловие: Я не думаю, что это хорошая идея, ваши HandlesAllEvents были бы полны условных выражений. Я думаю, что чем меньше IFs в программе, тем лучше это ради обслуживания. Меньше IFs означает, что дизайнер сделал хорошую работу с использованием объектно-ориентированных парадигм, шаблонов проектирования и оптимальных методов проектирования :)

Это говорит о том, что это другой случай, когда вы хотите написать меньше кода (таким образом, улучшая техническое обслуживание) и обрабатывать то же событие для нескольких аналогичных элементов управления, которые также ведут себя аналогичным образом. Например, если у вас есть набор текстовых полей, и вы хотите, чтобы сфокусированное одно изменение, его цвет фона будет более заметным. Затем вы инкапсулируете код обработчика GotFocus (и LostFocus) одним способом.

Если вы все еще хотите это сделать, то вы можете использовать отражение, чтобы обнаружить все элементы управления в своем приложении, и для каждого элемента управления все события, которые он может поднять, а затем SetHandler для вашего большого метода.