Дважды открыть диалоговое окно цвета?

У меня есть форма с 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

1 ответ

Если обработчик события вызывается дважды для одного события, то обработчик события был присоединен к событию дважды.

В идеале вы должны были бы отследить, почему 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
Другие вопросы по тегам