首页 > 解决方案 > 两次打开颜色对话框?

问题描述

我有一个带有 8 个命令按钮的表单,我AddHandler用于所有按钮的 Click 事件。

但是当我按下一个按钮时,cmbColor_Click运行两次。

Public Sub OpenForm()
    AddHandler cmbColor1.Click, AddressOf cmbColor_Click
    AddHandler cmbColor2.Click, AddressOf cmbColor_Click
    AddHandler cmbColor3.Click, AddressOf cmbColor_Click
    AddHandler cmbColor4.Click, AddressOf cmbColor_Click
    AddHandler cmbColor5.Click, AddressOf cmbColor_Click
    AddHandler cmbColor6.Click, AddressOf cmbColor_Click
    AddHandler cmbColor7.Click, AddressOf cmbColor_Click
    AddHandler cmbColor8.Click, AddressOf cmbColor_Click
End Sub


Private Sub cmbColor_Click(sender As Object, e As EventArgs)
    Dim _color As New ColorDialog
    Dim _button As Button = CType(sender, Button)
    _color.Color = _button.BackColor
    If _color.ShowDialog() = Windows.Forms.DialogResult.OK Then
        _button.BackColor = _color.Color
    End If
End Sub

标签: vb.netmouseclick-eventcolordialog

解决方案


如果为一个事件调用了两次事件处理程序,则事件处理程序已附加到该事件两次。

理想情况下,您应该找出多次使用 AddHandler 的原因并消除问题。

但是,作为快速修复,您可以在添加事件处理程序之前删除它 - 尝试删除不存在的事件处理程序并不是错误。

所以...

Friend Sub OpenForm()
    Dim cmbs = {cmbColor1, cmbColor2, cmbColor3, cmbColor4, cmbColor5, cmbColor6, cmbColor7, cmbColor8}
    For Each cmb In cmbs
        RemoveHandler cmb.click, AddressOf cmbColor_Click
        AddHandler cmb.click, AddressOf cmbColor_Click
    Next
End Sub

推荐阅读