Дважды открыть диалоговое окно цвета?
У меня есть форма с 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