vb.net单选按钮编程设置';选中';而不是导致';单击';事件
我正在从注册表加载带有存储设置值的表单 通常: 如果sFormat=TG_ReportFormatDft,则 RadioButton1.选中=真 ........ 其他的 RadioButton2.选中=真 .......... 如果结束 TG_ReportFormatDft是一个字符串常量,没有意义。单选按钮分组正确,手动单击操作正确 在程序的后面部分,我检查是否有手动更改:vb.net单选按钮编程设置';选中';而不是导致';单击';事件,vb.net,visual-studio-2015,Vb.net,Visual Studio 2015,我正在从注册表加载带有存储设置值的表单 通常: 如果sFormat=TG_ReportFormatDft,则 RadioButton1.选中=真 ........ 其他的 RadioButton2.选中=真 .......... 如果结束 TG_ReportFormatDft是一个字符串常量,没有意义。单选按钮分组正确,手动单击操作正确 在程序的后面部分,我检查是否有手动更改: 'Follow what the user is doing Private Sub RadioButton1_Cli
'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---触发鼠标单击事件
我可以理解“更改”事件,但没有发生鼠标单击
如何防止此“单击”事件传播 声明一个类级布尔变量“ClickedFromCode”。现在,当您在代码中设置值时,请将布尔值设置为true。请参见下面的示例代码
Private ClickedFromCode As Boolean
Private Sub Intialize
ClickedFromCode = True
If sFormat = TG_ReportFormatDft Then
RadioButton1.Checked = True
Else
RadioButton2.Checked = True
End If
ClickedFromCode = False
End Sub
Private Sub RadioButton1_Click(sender As Object, e As EventArgs) Handles RadioButton1.Click
If ClickedFromCode Then
Return
End If
msReports_Format2 = TG_ReportFormatDft
DoButtons(True)
End Sub
Private Sub RadioButton2_Click(sender As Object, e As EventArgs) Handles RadioButton2.Click
If ClickedFromCode Then
Return
End If
msReports_Format2 = TG_ReportFormatAlt
DoButtons(True)
End Sub
我不明白。您是否使用事件处理程序“…检查是否有手动更改”?什么是
DoButtons
?不管是什么问题,数据绑定可能会有所帮助,因为您的模型将引发propertychanged事件。从注册表加载默认值后,您必须设置Click事件处理程序。因此,不是通过设计器,而是使用类似于AddHandler RadioButton1.Click,AddressOf RadioButton1\u Click的代码,这是一个问题的原因并不十分明显,不应该如此。一个简单的解决方案是向类中添加一个IgnoreClick As Boolean
变量。无法重新创建该问题。RadioButton1.Checked=True未触发鼠标单击事件。@dbasnett我可以重现该问题。净4.5.2与2017年相比。