当涉及到vb.net中的事件时,我一直在考虑我的选择。 我想要做的是跟踪在应用程序中触发的事件,而不用“handle”子句明确声明它们。 这是一个伪代码:
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中实现这样的东西? 我的最终游戏真的能够监视来自另一个对象的许多对象中发生的事件,是不是有一种更易于维护的方法,然后在处理我想要捕获的事件的每个对象中添加一个特殊的子? / p>
我需要一些方法让一个对象处理在没有特殊子的情况下在其他对象中触发的事件,AddHandler有很长的路要走,但我不能像这样动态地使用它:
Public Sub AddEvent(event as System.EventArgs)
AddHandler event AddressOf doSomething()
End Sub
将使用以下方式调用:
Objec.AddEvent(form1.button1.Click)
我在这里有意义吗?你知道我在说什么吗?你知道怎么做吗? 任何帮助表示赞赏!
答案 0 :(得分:1)
前言:我认为这不是一个好主意,你的HandlesAllEvents会让我充满条件表达式。我认为程序中的IF越少,维护起来就越好。较少的IF意味着设计师使用面向对象的范例,设计模式和设计良好实践做得很好:)
也就是说,当您想要编写更少的代码(从而改进维护)并处理多个类似控件的相同事件时,情况会有所不同,这些控件的行为也相似。例如,如果您有一组文本框,并且您希望将焦点更改为背景颜色以使其更加明显。然后,您将GotFocus(和LostFocus)处理程序代码封装在一个方法中。
如果您仍想这样做:)那么您可以使用反射来发现应用程序中的所有控件,并为每个控件发出它可以引发的所有事件,然后将SetHandler发送到您的大方法。