当我按下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:
图2:
图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事件。使用键盘(按空格键切换复选框)时,这似乎也很好用。