Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 两次打开颜色对话框?_Vb.net_Mouseclick Event_Colordialog - Fatal编程技术网

Vb.net 两次打开颜色对话框?

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

我有一个带有8个命令按钮的表单,我使用
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