我有两个对象,A和B,两个对象都有相同的方法叫做Hi。因此A.hi将显示一个消息框,上面写着“嗨,我是A”,B.hi将显示一条消息“嗨,我是B”。他们还有一个按钮,可以激活这个方法。
如何在同一个处理程序中处理这两个事件?
例如,如果我单独进行,我会为A。
Private Sub btnHi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHiClassA.Click
A.hi
End Sub
我想在同一个处理程序中处理这两个事件,并且我能够使用这个逻辑做一个乏味的版本;
Private Sub btnHi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHiClassA.Click, btnHiClassB.Click
if sender is btnHiClassA then
A.hi
elseif sender is btnHiClassB then
B.hi
end if
End Sub
理想情况下它会是这样的:
Private Sub btnHi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHiClassA.Click, btnHiClassB.Click
'theObject = sender
'theObject.hi
End Sub
我该怎么做?
答案 0 :(得分:1)
使用方法Hi。
定义IHiSender接口在所有课程中实施IHiSender。
将EventArgs的子类定义为HiSenderEventArgs,并将其他属性WhoAmI定义为IHiSender类型。
答案 1 :(得分:0)
我会使用 Ctype 。 Ctype获取一个对象引用(如发送者)并将其转换为对象,如按钮。 通过这种方式,您可以动态获取发件人的属性。因此,如果您有一个事件处理程序,您可以根据需要使用尽可能多的对象。
Private Sub ButtonHi(sender As System.Object, e As System.EventArgs)
Dim ButtonName As String = CType(sender, Button).Name
If ButtonName = "ButtonHiA" Then
Msgbox("Hello World, I'm button A!")
ElseIf ButtonName = "ButtonHiB" Then
Msgbox("Hello World, I'm button B!")
End If
End Sub
正如您所看到的,该sub不是真正的处理程序,因此我们必须将对象指向它: 这可以通过不同的方式实现,以下是两个。
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
AddHandler ButtonHiA.Click, AddressOf ButtonHi
AddHandler ButtonHiB.Click, AddressOf ButtonHi
End Sub
Private Sub ButtonHiA_Click(sender As System.Object, e As System.EventArgs) Handles ButtonHiA.Click
ButtonHi(sender, e)
End Sub
Private Sub ButtonHiB_Click(sender As System.Object, e As System.EventArgs) Handles ButtonHiB.Click
ButtonHi(sender, e)
End Sub
如果这不是你想要的,请在下面的评论中澄清。