Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET如何在同一处理程序中处理多个事件_.net_Vb.net_Visual Studio 2010 - Fatal编程技术网

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

.NET如何在同一处理程序中处理多个事件,.net,vb.net,visual-studio-2010,.net,Vb.net,Visual Studio 2010,我有两个对象,A和B,两个对象都有相同的方法称为Hi。因此,A.hi将显示一个消息框,上面写着“嗨,我是A”,B.hi将显示一条消息,上面写着“嗨,我是B”。它们都有一个按钮,可以激活此方法 如何在同一个处理程序中处理这两个事件 例如,如果我把它们分开做,我会把它们放在一张桌子上 Private Sub btnHi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHiClassA.Click

我有两个对象,A和B,两个对象都有相同的方法称为Hi。因此,A.hi将显示一个消息框,上面写着“嗨,我是A”,B.hi将显示一条消息,上面写着“嗨,我是B”。它们都有一个按钮,可以激活此方法

如何在同一个处理程序中处理这两个事件

例如,如果我把它们分开做,我会把它们放在一张桌子上

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

我将如何执行此操作?

使用方法Hi定义接口iWisender

在所有类中实现IHiSender

将EventArgs的子类定义为HISENDEVERENTARGS,并将其他属性WHOMI定义为I ISENDER类型。

我不完全了解您想要实现的目标以及想要实现的方式,但从我获得它的方式来判断, 我会使用Ctype。Ctype获取对象引用(如发送方)并将其转换为对象,如按钮。 通过这种方式,您可以动态地获取发送方的属性。因此,如果您有一个事件处理程序,您可以使用任意多的对象来处理

有很多方法可以做到这一点,但我会创建一个私人子。 如您所见,该子对象不是真正的处理程序,因此我们必须将一个对象指向它: 这可以通过不同的方式实现,以下是两种

以加载形式添加处理程序: 按钮上的重定向处理程序\u单击:
如果这不是您想要的,请在下面的评论中澄清。

问题说明两个对象都有相同的方法称为Hi。这个答案完全忽略了这一点。我完全理解了方法的这一部分,这个答案说我没有真正理解他的意思,但这将起到替代作用。哦,好吧,如果Rawr Rang对我的答案有任何用处的话,我会保留我的答案。谢谢,我想Pieter明白了,但你的答案也给了我对其他事情的见解。谢谢你的帮助,罗尔打电话来了!这种类型的代码非常适合处理动态创建控件的事件!
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
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