当我按下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:
我个人会使用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
编辑:我尝试使用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
您可能在此处遇到递归事件处理程序的一些问题。如果在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事件。当使用键盘时(按空格键切换复选框),这似乎也可以正常工作。