vb.net - 两次打开颜色对话框?
问题描述
我有一个带有 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
解决方案
如果为一个事件调用了两次事件处理程序,则事件处理程序已附加到该事件两次。
理想情况下,您应该找出多次使用 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
推荐阅读
- java - 从 TestRunner 运行时出现 NullPointerException,当我从功能文件单独运行时同样有效
- go - 在 Redis 中按值过滤(使用 go 和 redis-go)
- typescript - 使用参数模拟和测试 onError
- php - 在混合字符串中,将数组的字符键和数字设为 PHP 中的值
- google-cloud-platform - 谷歌云笔记本在进行推理时出现错误 524
- macos - 带有别名 zsh 的终端命令前面的奇怪数字和符号
- excel - 我不知道如何总结这个烂摊子,plz halp(每小时半小时的平均等待时间+每小时排队的人数)
- python-3.x - 更改或设置 matplotlib 表的字体属性
- firebase - 如何跟踪firestore中的一个特定字段
- amazon-web-services - 未找到无服务器命令“wsgi serve”