如何在未执行任何操作的情况下将单选按钮标记为已选中?

How to mark a radio button as checked with no action performed?

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

当我将信息从数据库拉回新的 "search" 表单(看起来与用于提交数据的表单完全一样)时,我希望单选按钮反映它们在表格已保存。因此,如果一个框在保存时为 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

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

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

创建要在表单加载事件中使用的布尔值。默认情况下将其值设置为 true,当加载完成时,将其值设置为 false。

在每个 radio/check 事件中检查该值,如果它是真的就退出子程序,否则执行它应该做的任何事情。

此致。

您可以使用 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 事件。

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

_CheckedChanged 

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

_MouseClick

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

感谢大家的参与!!!