Дважды открыть диалоговое окно цвета? - PullRequest
0 голосов
/ 22 мая 2018

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

0 голосов
/ 22 мая 2018

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

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