如何通过选中一个复选框来取消选中其他复选框?

时间:2019-03-26 11:34:20

标签: vb.net

当我按下chkCP 1时,它会取消选中chkYP,但是chkCP不会显示其选中状态2;我需要双击chkCP才能显示其检查状态3

我使用了以下代码:

Private Sub chkCP_CheckedChanged(sender As Object, e As EventArgs) Handles chkCP.CheckedChanged
    chkYP.Checked = False
End Sub

Private Sub chkYP_CheckedChanged(sender As Object, e As EventArgs) Handles chkYP.CheckedChanged
    chkCP.Checked = False
End Sub

图1:1

图2:2

图3:3

3 个答案:

答案 0 :(得分:1)

我个人将使用单选按钮,因为这是他们的意图。但是,我见过一个选择不选择任何选项的时间,就像您可以轻松使用复选框一样。话虽这么说,您只需将原始代码移到复选框的click事件而不是checkchanged事件中,就应该能够达到预期的结果。原因是,当您单击一个时,它会触发checkchanged事件,将其设置为false,进而触发控制checkchanged事件的控制。尝试将原始代码替换为

Private Sub chkCP_Click(sender As Object, e As EventArgs) Handles chkCP.Click
    chkYP.Checked = False
End Sub

Private Sub chkYP_Click(sender As Object, e As EventArgs) Handles chkYP.Click
    chkCP.Checked = False
End Sub

答案 1 :(得分:0)

编辑: 我尝试使用if语句,它起作用了!但是,我不能再取消选中该复选框。

Private Sub chkCP_CheckedChanged(sender As Object, e As EventArgs) Handles chkCP.CheckedChanged
    If chkYP.Checked = True Then
        chkYP.Checked = False
    Else
        chkCP.Checked = True
    End If
End Sub

Private Sub chkYP_CheckedChanged(sender As Object, e As EventArgs) Handles chkYP.CheckedChanged
    If chkCP.Checked = True Then
        chkCP.Checked = False
    Else
        chkYP.Checked = True
    End If
End Sub

答案 2 :(得分:0)

您可能在这里遇到递归事件处理程序的问题。如果您在chkCP_CheckedChanged中设置chkYP.Checked,则将触发chkYP_CheckedChanged。这将设置chkCP.Checked,从而再次触发chkCP_CheckedChanged。

您可以尝试如下操作:

Private _checking As Boolean

Private Sub chkCP_CheckedChanged(sender As Object, e As EventArgs) Handles chkCP.CheckedChanged
    If Not _checking Then
        _checking = True
        chkYP.Checked = False
        _checking = False
    End If
End Sub

Private Sub chkYP_CheckedChanged(sender As Object, e As EventArgs) Handles chkYP.CheckedChanged
    If Not _checking Then
        _checking = True
        chkCP.Checked = False
        _checking = False
    End If
End Sub

它可能不会赢得选美比赛,但它可能只是做这项工作。

如果仅希望选择N个选项之一,则使用单选按钮可能是更好的解决方案。

修改: 查尔斯·梅的答案更加优雅。他处理Click事件而不是CheckedChanged事件。使用键盘(按空格键切换复选框)时,这似乎也很好用。