【问题标题】:vb.net radiobutton progromatically setting 'Checked' and not cause 'Click' eventvb.net 单选按钮以编程方式设置“已检查”并且不会导致“点击”事件
【发布时间】: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。

标签: vb.net visual-studio-2015


【解决方案1】:

声明一个类级别的布尔变量“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2012-02-24
    • 2012-06-21
    • 2012-02-06
    相关资源
    最近更新 更多