.NET如何在同一个处理程序中处理多个事件

时间:2013-04-07 05:30:23

标签: .net vb.net visual-studio-2010

我有两个对象,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

我该怎么做?

2 个答案:

答案 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不是真正的处理程序,因此我们必须将对象指向它: 这可以通过不同的方式实现,以下是两个。

在Form_Load中添加处理程序:

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

button_click上的重定向处理程序:

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

如果这不是你想要的,请在下面的评论中澄清。