我试图让它在选中复选框时,所有其他复选框都变为未选中状态。我知道还有其他一些方法可以做到这一点,但是我该怎么做呢?此外,如果用户尝试取消选中当前选中的框,则应保持选中状态。
private void checkState(CheckBox b)
{
for (int i = 0; i < cb.Count; i++)
{
if (cb[i] != b)
{
cb[i].Checked = false;
}
//else
//{
// cb[i].Checked = true;
//}
}
b.Checked = true;
}
对于此行为,您应该使用RadioButton
(一组)而不是复选框,因为这是他们的自然行为。
引用:
单选按钮 - MSDN
例
更新:如果您仍然想用checkbutton
来做,即使不顾我们的建议,您也可以做这样的事情:
1º 创建一个函数来修改控件组。检查它们是否正在更改。如果没有,则需要解开支票
Private Sub modify(ByVal sender As CheckBox)
For Each item As CheckBox In Me.Controls
If (item.Equals(sender) = False) Then
item.Checked = False
End If
Next
End Sub
注意:由于我是用 VB 编写的,因此注意比Me
表示实际形式,并在 C# 中替换为this
。无论如何,您应该将checkbox
组的父控件放在那里。
2º 在每个复选框的click
事件中调用此函数。我宁愿click
而不是CheckedChanged
不要强制递归地第二次调用该函数。
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
modify(sender)
End Sub