C#清除检查复选框状态的方法?

时间:2012-06-21 01:22:37

标签: c# .net winforms checkbox

我有以下代码,它将布尔值List作为参数,然后通过单独验证列表来设置每个checkList的检查状态。

是否有更有效的方式编写以下代码?例如,通过使用循环?

public PointCtrlRowSelectionForm(List<Boolean> checkList, PointCtrlForm form, string title)
            {
                InitializeComponent();
                this.form = form;
                this.Text = title;
                if (checkList[0] == true)      
                {
                    checkBox1.Checked = true;
                    checkBox1.CheckState = CheckState.Checked;
                }
                if (checkList[1] == true)
                {
                    checkBox2.Checked = true;
                    checkBox3.CheckState = CheckState.Checked;
                }
                if (checkList[2] == true)
                {
                    checkBox3.Checked = true;
                    checkBox3.CheckState = CheckState.Checked;
                }
                if (checkList[3] == true)
                {
                    checkBox4.Checked = true;
                    checkBox4.CheckState = CheckState.Checked;
                }
                if (checkList[4] == true)
                {
                    checkBox5.Checked = true;
                    checkBox5.CheckState = CheckState.Checked;
                }
                if (checkList[5] == true)
                {
                    checkBox6.Checked = true;
                    checkBox6.CheckState = CheckState.Checked;
                }           
            }

4 个答案:

答案 0 :(得分:8)

创建这些复选框的数组。你可以做所有的for循环。

for(int i = 0; i < checklist.Length; i++)
{
    if (checklist[i].Checked == true)
    {
        arrayOfCheckboxes[i].Checked = true;
        arrayOfCheckboxes[i].CheckState = CheckState.Checked;
    }
}

答案 1 :(得分:1)

您可以将列表更改为字典并执行简单的枚举,尽管如此:

public PointCtrlRowSelectionForm(Dictionary<CheckBox, Boolean> checkList, PointCtrlForm form, string title)
        {
            InitializeComponent();
            this.form = form;
            this.Text = title;

            foreach<KeyValuePair<CheckBox, Boolean> kvp in checklist)
            {
                if (kvp.Value == true)      
                {
                    kvp.Key.Checked = true;
                    kvp.Key.CheckState = CheckState.Checked;
                }
            }
        }

答案 2 :(得分:1)

遗憾的是,IDE表单设计器不支持 Control Grouping 功能。 根据您设计表单的方式,我可以想到4种方法:

  1. 更改自动生成的代码并将CheckBox实例添加到阵列(不推荐)。
  2. 保持自动生成的代码不变,但创建引用每个CheckBox的第二个数组。

    CheckBox[] checkboxes = new CheckBox[]{checkBox1, checkBox2, checkBox3};
    
  3. 将所有Checkbox个实例放入群组控件中。然后,您可以循环浏览该组的Controls属性。使用每个Tag的{​​{1}}属性来选择索引(替代方法可以是使用CheckBox来代替TabIndex实例的顺序被发现)。

    CheckBox
  4. 与上一个解决方案相同,但在主表单上。

答案 3 :(得分:0)

假设您的复选框实际上是以可重复的模式命名的,那么您可以做一些反映:

Type myType = this.GetType();
for(int i=0; i < checkList.Length; i++)
{
    string fieldName = String.Format("checkBox{0}", i);
    FieldInfo info = myType.GetField(fieldName);
    CheckBox cb = (CheckBox)info.GetValue(this);
    if(checkList[i] == true)
    {
        cb.Checked = true;
        cb.CheckState = CheckState.Checked;
    }
}

这有点冗长,但更灵活,您可以添加更多或更少的复选框而无需修改此代码(假设您坚持使用命名模式)。