9

问题在c#.NET、Visual Studio、Windows Form Application下面临

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

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

有没有Checkbox group name我可以使用的类型功能???

我想编写这样的代码:

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

checkboxes组名在哪里。

4

5 回答 5

11

您可以使用简单的 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.

于 2012-12-12T08:28:43.840 回答
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。请让我知道发生任何错误。将“盒子”视为常规数组。

于 2012-12-12T08:30:02.727 回答
0

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

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
}
于 2012-12-12T08:22:54.327 回答
0

如果所有复选框都在一个 groupbox 中,您可以这样做:

foreach(Control c in myGroupBox.Controls)
  {
   if (c is CheckBox)
    {
    //do something
     CheckBox temp = (CheckBox)c;
     if(temp.Checked)
        //its checked
    }  
  }   
于 2012-12-12T08:23:23.137 回答
0

I suppose other than subscribing to event CheckedChanged there is no alternative even if it is contained in some panel or form, You have to use if else,

if it would have been web base eg asp.net or php we could use jquery because it gives us the option to loop through each particular event using .each and getting its value

于 2012-12-12T08:34:42.853 回答