Vb.net Can';t删除事件处理程序,多次添加

Vb.net Can';t删除事件处理程序,多次添加,vb.net,event-handling,Vb.net,Event Handling,我有一段代码,每次打开表单时,我都会添加一个处理程序,我使用的是visual basic,但第一次输入表单时一切都正常,但第二次我有2个处理程序,如果输入第三个,我就有3个处理程序,依此类推。我不知道为什么会这样 这是我到目前为止试过的 我已将所有计算机存储在另一个类中,但我将发送到myForm以显示它们,但要添加它们,我使用以下代码: Private Sub add_machine(ByRef machine As Machine) RemoveHandler machine

我有一段代码,每次打开表单时,我都会添加一个处理程序,我使用的是visual basic,但第一次输入表单时一切都正常,但第二次我有2个处理程序,如果输入第三个,我就有3个处理程序,依此类推。我不知道为什么会这样

这是我到目前为止试过的

我已将所有计算机存储在另一个类中,但我将发送到myForm以显示它们,但要添加它们,我使用以下代码:

    Private Sub add_machine(ByRef machine As Machine)

    RemoveHandler machine.imgBox.Click, AddressOf Me.imgBox_Click
    AddHandler machine.imgBox.Click, AddressOf Me.imgBox_Click
    Me.Controls.Add(machine.get_imgMachine)

    Private Sub imgBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)        
    'Some code
    End Sub
每次我打开表单时,我调用sub add_machine来添加我的机器,正如您所看到的,我发送它们
ByRef
来简化我的代码,我尝试放置
RemoveHandler
,因为我发送
ByRef
来避免有多个处理程序,但它不起作用,请帮助


提前谢谢。

两件事,不要通过机器ByRef。您没有返回新对象。请阅读此链接以了解更多关于何时使用什么的信息


其次,在表单加载(或初始化)期间添加处理程序,并在表单关闭时删除它们。这将有助于确保您使用的是对同一对象的引用。

传递给此函数的
机器
是否与上一次调用中的相同?如果没有,这将不起作用。您需要取消订阅以前的
机器
实例。我认为是相同的
机器
,因为我有一个按钮调用此表单,我的主表单总是打开的,而这就是我存储机器的地方,我如何知道是否不是相同的实例。您将此标记为VBA,但可能是指Visual Basic?你看了吗:我没有那样想,我现在觉得自己很愚蠢,谢谢