好吧,我要直截了当,我有 20 个复选框,如下所示:
我想要做的是使每列中只有一个复选框(上面编号)可以一次检查,我最初只是要检查每个“已检查”事件并使其成为当其中一个它们被选中它会取消选中列中的其他 3 个,但我意识到这并不实用,而且它非常长,因为我总共有 80 个复选框。
我想知道是否有人可以指出我正确的方向?
就像 saul672 所说,您可能应该只使用单选按钮,因为这正是它们的设计目的。但是,如果您仍然想使用复选框来实现这一点,因为您喜欢方形而不是什么,我会这样做:
您必须将复选框放在一个容器中,该容器仅包含来自同一列的复选框。然后,将此事件添加到每个复选框。
private void CheckedChanged(object sender, EventArgs e)
{
CheckBox cb = (CheckBox) sender;
if (cb.Checked)
{
foreach (CheckBox control in cb.Parent.Controls)
{
if (control != cb)
control.Checked = false;
}
}
}
用这个:
public class ColumnCheckBox:CheckBox
{
public int ColumnIndex;
}
void columnCheckBox1_CheckedChanged(object sender, EventArgs e)
{
int columnIndex = ((ColumnCheckBox)sender).ColumnIndex;
}
然后仅选中该列中的复选框。显然,您必须拥有复选框列表,List<List<CheckBox>> CheckBoxList
以便您可以执行
foreach (ColumnCheckBox cb in CheckBoxList(columnIndex))