2016-08-11 92 views
-1

我正在制作一个程序,该程序必须计算检查多少个CheckBox控件,仅在GroupBox中。GroupBox中检查了多少个CheckBox?

我尝试了很多不同的方法,但我无法得到它的工作。

这怎么做?

// This is one of the many things I tried...   
public CheckBox rNum; 
//This method is used on FormLoad. 
public void CreateBoxes() 
{ 
    for (int i = 0; i < 36; i++) 
    { 
     rNum = new CheckBox(); 
     rNum.Text = i.ToString(); 

     //CheckBoxes added to flowLayoutPanel. 
     flw.Controls.Add(rNum); 
    } 
} 

public int count;   
//This method is used on Button Click 
public void CountIt() 
{ 
    foreach (CheckBox box in groupBox.Controls.OfType<CheckBox>()) 
    { 
     if (box.Checked) 
     { 
      count++; 
     } 
    }  
    MessageBox.Show(count.ToString()); 
} 
+2

如果您可以确切地说出哪些功能无效,那将会很有帮助。计数是否过高?计数是零吗?是“组合框”的“CheckBoxes”直接子代还是有一个中间“Panel”或类似的东西? – adv12

+1

请注意,当您增加'count'时,您实际上并没有检查是否选中了“CheckBox”。 –

+1

您在我的答案的评论中说,您在“Form”中创建了75个“CheckBoxes” s'Load'事件处理程序。你加什么控制?到'groupBox'?或者到“形式”?还是对其他一些控制? – adv12

回答

1

根据您的意见和编辑你的问题,你需要在FlowLayoutPanel在寻找你的CheckBoxes在其中添加它们,不groupBox。鉴于您的FlowLayoutPanel被称为flw,请执行下列操作:

public void CountIt() 
{ 
    foreach (CheckBox box in flw.Controls.OfType<CheckBox>()) 
    { 
     if (box.Checked) 
     { 
      count++; 
     } 
    } 

    MessageBox.Show(count.ToString()); 
} 

请注意,我只增加当CheckBox检查计数,这是目前体现在你的问题。没有做到这一点检查是你的原代码中的一个错误。

+0

感谢您的回复。但是这不会以某种方式,我以前尝试过... MessageBox始终显示0 ... – Mizuchi

+1

然后请提供我在我对该问题的评论中请求的信息。 – adv12

+0

我忘了补充说,大约有35个复选框,所以我使用'Checkbox chk = new CheckBox()'在forload循环中创建了它们。 – Mizuchi

2

您可以使用LINQ查询是这样的:

var count = flw.Controls.OfType<CheckBox>().Count(x=>x.Checked); 

它返回FLW的CheckBox控制计数被检查。

+0

看来你需要在标题中进行更正,在你说的代码中* // CheckBoxes添加到flowLayoutPanel。*但是标题中你要求* GroupBox中的复选框?*。无论如何,如果它们是以任何方式托管的,只需使用该控件上的查询即可。 –

+0

flw的启示来自原始问题的编辑。 – adv12

+0

@ adv12看来OP在编辑后忘记了更正题目和描述。在标题和问题描述中,它们的意思可能是FlowLayoutPanel。 –

相关问题