无法删除事件处理程序,多次添加

时间:2014-09-21 13:05:13

标签: vb.net event-handling

我有一段代码,每次表单打开时我都会添加一个处理程序,我在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来添加dinamically我的机器,因为你可以看到我发送它们ByRef来简化我的代码我试着把它RemoveHandler放到我发送ByRef以避免拥有多个处理程序,但它无效请求帮助

提前致谢。

1 个答案:

答案 0 :(得分:2)

两件事,不要通过机器ByRef。您没有返回新对象。有关何时应使用Byval vs ByRef

的更多信息,请阅读此链接

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