Vb.net 两次打开颜色对话框?
我有一个带有8个命令按钮的表单,我使用Vb.net 两次打开颜色对话框?,vb.net,mouseclick-event,colordialog,Vb.net,Mouseclick Event,Colordialog,我有一个带有8个命令按钮的表单,我使用AddHandler作为所有按钮的单击事件 但当我按下按钮时,cmbColor\u单击run两次 Public Sub OpenForm() AddHandler cmbColor1.Click, AddressOf cmbColor_Click AddHandler cmbColor2.Click, AddressOf cmbColor_Click AddHandler cmbColor3.Click, AddressOf cmbC
AddHandler
作为所有按钮的单击事件
但当我按下按钮时,cmbColor\u单击
run两次
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
如果为一个事件调用了两次事件处理程序,则事件处理程序已附加到该事件两次 理想情况下,您可以追踪AddHandler被多次使用的原因并消除该问题 但是,作为一个快速修复,您可以在添加事件处理程序之前删除它-尝试删除不存在的事件处理程序不是错误 所以
可能,您为同一个按钮调用了两次
AddHandler
?尝试在AddHandler
调用上设置断点。此外,您还可以(使用调试器或一些跟踪)检查事件处理程序的sender
参数:它是否始终相同,还是在两次调用之间发生变化?您可能也在设计器中注册了该方法,然后将其复制到所有其他按钮如果这些按钮是按钮,为什么它们的前缀为“cmb”,通常表示一个组合框
?唯一比匈牙利符号更糟糕的是误导匈牙利符号。@jmchilinney cmbSomething=>commandButtonSomething。可能会产生误导:您可以在AddHandler之前使用removeholder cmbColor1。单击,cmbColor的地址\u单击
等。如果处理程序未与事件关联,则不是错误。(您应该将这些cmbColor引用放入一个数组中,并在其中循环以删除/添加处理程序。)
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