【发布时间】:2017-04-15 23:47:53
【问题描述】:
我正在加载一个表单,其中包含来自注册表中存储设置的值
通常: 如果 sFormat = TG_ReportFormatDft 那么 RadioButton1.Checked = True ........... 别的 RadioButton2.Checked = True ………… 结束如果
TG_ReportFormatDft 是一个字符串常量,没有意义。单选按钮分组正确,手动单击的行为正确。
在程序的后面,我检查是否有手动更改:
'Follow what the user is doing
Private Sub RadioButton1_Click(sender As Object, e As EventArgs) Handles RadioButton1.Click
msReports_Format2 = TG_ReportFormatDft
DoButtons(True)
End Sub
Private Sub RadioButton2_Click(sender As Object, e As EventArgs) Handles RadioButton2.Click
msReports_Format2 = TG_ReportFormatAlt
DoButtons(True)
End Sub
想象一下,当这些下游子例程在没有鼠标点击的情况下被触发时,我会感到惊讶。看来: RadioButton1.Checked = True --- 触发鼠标点击事件。
我可以理解“On Change”事件,但没有发生鼠标点击。
如何防止此“点击”事件传播?
【问题讨论】:
-
我不明白。您使用事件处理程序“...检查是否有手动更改”?
DoButtons是什么?无论是什么问题,数据绑定都可能会有所帮助,因为您的模型会引发 propertychanged 事件。 -
从注册表加载默认值后,您必须设置 Click 事件处理程序。所以不是通过设计器,而是使用
AddHandler RadioButton1.Click, AddressOf RadioButton1_Click之类的代码 -
为什么这是一个问题并不完全清楚,它不应该是。一个简单的解决方案是在你的类中添加一个
IgnoreClick As Boolean变量。 -
无法重新创建问题。 RadioButton1.Checked = True 没有触发鼠标点击事件。
-
@dbasnett 我可以重现这个问题。 .NET 4.5.2 VS 2017。