0

好吧,我要直截了当,我有 20 个复选框,如下所示:

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

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

4

2 回答 2

0

就像 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;
        }
    }
}
于 2012-08-18T04:39:48.297 回答
0

用这个:

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))

于 2012-08-18T04:30:23.710 回答