vb.net单选按钮编程设置';选中';而不是导致';单击';事件

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

我正在从注册表加载带有存储设置值的表单

通常: 如果sFormat=TG_ReportFormatDft,则 RadioButton1.选中=真 ........ 其他的 RadioButton2.选中=真 .......... 如果结束

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---触发鼠标单击事件

我可以理解“更改”事件,但没有发生鼠标单击


如何防止此“单击”事件传播

声明一个类级布尔变量“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年相比。