C#多个复选框集合

C#多个复选框集合,c#,checkbox,C#,Checkbox,我要直截了当地说,我有20个复选框,像这样排列: 我想做的是使每一列(上面编号的)中一次只能选中一个复选框,我最初只是想检查每个“选中”项事件并使其成为这样,当其中一个被选中时,它将取消选中列中的其他3个,但我意识到这并不实际,而且它非常长,因为我总共有80个复选框 我想知道是否有人能给我指出正确的方向?使用这个: public class ColumnCheckBox:CheckBox { public int ColumnIndex; } void columnCheckBox1

我要直截了当地说,我有20个复选框,像这样排列:

我想做的是使每一列(上面编号的)中一次只能选中一个复选框,我最初只是想检查每个“选中”项事件并使其成为这样,当其中一个被选中时,它将取消选中列中的其他3个,但我意识到这并不实际,而且它非常长,因为我总共有80个复选框

我想知道是否有人能给我指出正确的方向?

使用这个:

public class ColumnCheckBox:CheckBox
{
    public int ColumnIndex;
}

void columnCheckBox1_CheckedChanged(object sender, EventArgs e)
{
    int columnIndex = ((ColumnCheckBox)sender).ColumnIndex;
}
然后只选中该列中的复选框。显然,您必须有复选框列表
List CheckBoxList
,这样您就可以
foreach(CheckBoxList(columnIndex)中的ColumnCheckBox cb)

就像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;
        }
    }
}

所以你想让它们像单选按钮一样工作??如果更改它们,只需为每个列设置一个组名