从.c#.net中的一堆复选框中选中的复选框

时间:2012-12-12 08:11:18

标签: c# .net winforms

c#.NET,Visual Studio,Windows窗体应用程序

面临问题

我在一个表单和一个面板中随机放置了一堆复选框。 因此,如果在表单中选择了任何checkbox,则应该将其值相加。

底线:不是使用大量的“If-else循环”来评估是否已经检查过。我想用“for循环”来简化它。

是否有Checkbox group name类型功能,我可以使用???

我想要这样的代码:

for(int i=0;i<checkboxes.length;i++)
{
    string str;
    if(chkbox.checked)
    {
        str+=chkbox.value;
    }
}

checkboxes是组名。

5 个答案:

答案 0 :(得分:7)

您可以使用简单的LINQ查询

var checked_boxes = yourControl.Controls.OfType<CheckBox>().Where(c => c.Checked);

其中yourControl是包含复选框的控件。


checked_boxes现在是一个实现表示查询的IEnumerable<CheckBox>的对象。通常,您希望使用foreach循环遍历此查询:

foreach(CheckBox cbx in checked_boxes) 
{
}

您也可以通过调用List<Checkbox>将此查询转换为列表(.ToList()),可以在checked_boxes上或直接在Where(...)之后调用。


由于您希望将复选框的Text连接到单个字符串,因此可以使用String.Join

var checked_texts = yourControl.Controls.OfType<CheckBox>()
                                        .Where(c => c.Checked)
                                        .OrderBy(c => c.Text)
                                        .Select(c => c.Text);

var allCheckedAsString = String.Join("", checked_texts);

我还添加了OrderBy子句,以确保复选框按其Text排序。

答案 1 :(得分:1)

CheckBox[] box = new CheckBox[4];  

box[0] = checkBox1;  
box[1] = checkBox2;  
box[2] = checkBox3;  
box[3] = checkBox4;

for(int i=0; i<box.length; i++)
{
      string str;
      if(box[i].checked== true)
      {
           str += i.value;
      }
} 

我认为此代码适用于DotNet4.0。 Plz让我知道发生任何错误。将'box'视为常规数组。

答案 2 :(得分:0)

将所有复选框订阅到一个CheckedChanged事件处理程序,并在选中或取消选中任何复选框时构建字符串。以下查询将构建字符串,其中包含所有Form的已选中复选框的名称:

private void Checkbox_CheckedChanged(object sender, EventArgs e)
{
    // this will use all checkboxes on Form
    string str = Controls.OfType<CheckBox>()
                         .Where(ch => ch.Checked)
                         .Aggregate(new StringBuilder(),
                                    (sb, ch) => sb.Append(ch.Name),
                                    sb => sb.ToString());
    // use string
}

答案 3 :(得分:0)

如果所有复选框都在分组框中,您可以执行以下操作:

foreach(Control c in myGroupBox.Controls)
  {
   if (c is CheckBox)
    {
    //do something
     CheckBox temp = (CheckBox)c;
     if(temp.Checked)
        //its checked
    }  
  }   

答案 4 :(得分:0)

我认为除了订阅事件CheckedChanged之外,即使它包含在某些面板或表单中,也没有其他选择,你必须使用if else,

如果它本来是web基础,例如asp.net或php我们可以使用jquery,因为它让我们可以选择使用.each循环每个特定事件并获取其值