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

问题描述 投票:0回答:3

当我按下chkCP1时,它会取消选中chkYP,但chkCP不会显示其已检查的state2;我需要在显示已检查的state3之前双击chkCP。

我用这些代码:

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:

图2:

图3:

vb.net
3个回答
1
投票

我个人会使用radiobuttons,因为这是他们打算做的。但是,我看到一个时间,选项既不选择你可以轻松做复选框的选项。话虽如此,您只需将原始代码移动到复选框的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

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

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事件。当使用键盘时(按空格键切换复选框),这似乎也可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.