【问题标题】:How to mark a radio button as checked with no action performed?如何将单选按钮标记为已选中而不执行任何操作?
【发布时间】:2025-12-06 11:55:02
【问题描述】:

我有一个带有CheckBoxRadioButton 控件的表单。当人们点击按钮/框时,它会将结果保存到我的数据库中。稍后,我可能希望其他人检索表单并进行更改或继续使用它。

当我将信息从数据库中拉回一个新的“搜索”表单(看起来与用于提交数据的表单完全一样)时,我希望单选按钮反映它们在保存表单时所处的状态.因此,如果一个框在保存时为 TRUE(选中),我希望它在新表单上显示 TRUE(选中)。

但是,当我使用时

radiobutton.checked = True

它确实将我的按钮标记为已选中...。它的行为也像按钮被再次单击一样。所以我的数据库中有重复的结果。每次打开表单时它都会继续这样做。

所以,我想要一种方法将框标记为已选中(保存时的状态),但不会再次导致事件。

这是一个例子:

str = "SELECT * from OpenEvents WHERE EventID = " & eventId & ""
    Dim cmd6 As OleDbCommand = New OleDbCommand(str, myConnection)
    dr = cmd6.ExecuteReader()
    While dr.Read()
        contactType = dr("ContactType").ToString
        abend = dr("Abend").ToString
        paged = dr("Paged").ToString
        shortSummary = dr("ShortSummary").ToString
        eventNotes = dr("EventNotes").ToString
        impacting = dr("Impacting").ToString
        L1Engaged = dr("L1Engaged").ToString
        L2Engaged = dr("L2Engaged").ToString
        managerEngaged = dr("ManagerEngaged")
        IncTicket = dr("IncTicket").ToString
    End While
    myConnection.Close()

    If contactType = "Call" Then
        CallRadioButton.Checked = True
    ElseIf contactType = "IM" Then
        IMRadioButton.Checked = True
    ElseIf contactType = "Other" Then
        OtherRadioButton.Checked = True
    ElseIf contactType = "Alert" Then
        AlertRadioButton.Checked = True
    Else
    End If

    If abend = "True" Then AbendCheckBox.Checked = True
    If paged = "True" Then PagedYes.Checked = True
    ShortSummaryTextBox.Text = shortSummary
    DetailsTextBox.Text = eventNotes
    If impacting = "True" Then ImpactingYesRadioButton.Checked = True
    If L1Engaged = "True" Then L1YesRadioButton.Checked = True
    If L2Engaged = "True" Then L2YesRadioButton.Checked = True
    If managerEngaged = "True" Then ManagerYesRadioButton.Checked = True
    IncTicketTextBox.Text = IncTicket

【问题讨论】:

  • 我建议您创建一个布尔值以在加载事件中使用。将其启动为 true,并在完成加载表单后将其结果更改为 false。并且在每个单选/检查操作中,您都会验证布尔值的值,如果表单正在加载,则退出子。

标签: vb.net visual-studio-2010 radio-button


【解决方案1】:

只是为了把它变成一个答案:

创建一个在表单加载事件中使用的布尔值。开始时默认为true,加载完成后设置为false。

在每个无线电/检查事件中检查值,如果为真则退出子,否则执行它应该做的任何事情。

最好的问候。

【讨论】:

    【解决方案2】:

    您可以使用Click 事件代替CheckedChanged 事件。

    这样做,如果您想引发链接到 RadioButton 的事件,您可以使用 PerformClick 而不是 Checked = True

    如果您想在不引发事件的情况下更改检查状态,可以使用Checked = True

    这里有一个小例子:

    Private Sub RadioButton1_Click(sender As Object, e As EventArgs) Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click
        Select Case sender.name
            Case Is = "RadioButton1"
                Me.Label1.BackgroundColor = Color.Yellow
                Me.Label2.BackgroundColor = Color.Gray
                Me.Label3.BackgroundColor = Color.Gray
            Case Is = "RadioButton2"
                Me.Label1.BackgroundColor = Color.Gray
                Me.Label2.BackgroundColor = Color.Yellow
                Me.Label3.BackgroundColor = Color.Gray
            Case Is = "RadioButton3"
                Me.Label1.BackgroundColor = Color.Gray
                Me.Label2.BackgroundColor = Color.Gray
                Me.Label3.BackgroundColor = Color.Yellow
        End Select
    End Sub
    
    Private Sub Btn_ChangeSelected_Click(sender As Object, e As EventArgs) Handles Btn_ChangeSelected.Click
        Me.RadioButton1.Checked = True
    End Sub
    
    Private Sub Btn_PerformClick_Click(sender As Object, e As EventArgs) Handles Btn_PerformClick.Click
        Me.RadioButton1.PerformClick()
    End Sub
    

    如果您单击 Btn_ChangeSelected RadioButton1 将被选中,但不会引发任何事件。

    如果您单击 Btn_PerformClick RadioButton1 将被选中并引发 RadioButton1.click 事件。

    【讨论】:

    • 我做到了,正如您在上面的代码中看到的那样。无论我尝试了什么,如果我使用了 checked = True 它总是会触发事件。我最终将我的代码从 CheckedChanged 事件中移到了 MouseClick 事件中。我使用它是因为这是我从设计视图中单击控件时创建的子。学过的知识。感谢您的信息!
    • @Doonze 正是如此。如果您使用RadioButton.Click 事件运行子程序,您可以更改 RadioButton 的选中状态而不产生任何效果,但您仍然可以使用RadioButton.PerformClick 运行子程序。此外,您可以使用相同的 sub 处理更多 RadioButton.Click,而使用 RadioButton.CheckedChanged 事件则无法做到这一点,因为代码将运行两次(一个用于取消选中的 RadioButton,另一个用于选中的 RadioButton)
    【解决方案3】:

    我会将表单关闭事件中单选按钮的状态保存到 my.settings 并在表单加载事件中读取所有内容。这样您就可以在退出程序之前保留单选按钮的最后设置。

    【讨论】:

    • 我相信它仍然会触发 CheckChanged 事件
    • 是的,所以逻辑应该放在 CheckedChanged 事件中。使用布尔值并将其设置为第一次,在表单加载事件中它不做任何事情,而是设置布尔值,以便下次它做任何需要做的事情。
    • 当它触发它时,我现在在 CheckedChanged 事件中没有代码,所以它什么也不做。所以它就像我需要的那样工作!由于可以使用它的方式,并且几个人可以同时打开相同的表单,因此设置文件不是我最好的解决方案。但这是个好主意!
    【解决方案4】:

    就我而言,我最终将代码从

    _CheckedChanged 
    

    事件,这是从设计视图中单击控件时的默认设置

    _MouseClick
    

    事件。解决了我所有的问题。似乎默认设置有点愚蠢,但吸取了教训。现在一切都按我的需要工作。

    感谢大家的意见!!!

    【讨论】:

      最近更新 更多