我有一个包含多个GroupBox的表单。每个GroupBox内部都包含多个CheckBox。每个GroupBox(在其外部)还具有两个关联的按钮,用于取消选中/选中链接的GroupBox中的所有CheckBox。
我的计划是使用增强的for循环遍历每个GroupBox内部的所有CheckBox。但是,GroupBoxes缺少使循环正常工作的必需属性(getEnumerator?)。
此外,我需要这样做,以便每次我手动选中或取消选中CheckBox时,TextBox都会使用存储在选中CheckBoxes的tag属性中的值的总和来更新。
我发现了一些类似的问题,希望人们检查/取消选中表单中的每个CheckBox。这是适合我的应用的代码。
private void CalculateComplementPrice()
{
try
{
double total = 0;
foreach (Control c in Controls) //I don't want to iterate through all the form
{
if (c is CheckBox)
{
CheckBox cb = (CheckBox)c;
if(cb.Checked == true)
{
total += Convert.ToDouble(cb.Tag);
}
}
}
tbComplementsPrice.Text = Convert.ToString(total);
}
catch
{
MessageBox.Show("Error on the complement GroupBox", "Error", MessageBoxButtons.OK);
}
}
是否有任何方法可以遍历GroupBox的所有组件而不必遍历所有表单?
==更新==
我更改了以前找到的一些代码:
private void CalculateComplementPrice()
{
double total = 0;
try
{
foreach (Control ctrl in this.Controls)
{
if (ctrl.ToString().StartsWith("System.Windows.Forms.GroupBox"))
{
foreach (Control c in ctrl.Controls)
{
if (c is CheckBox)
{
if (((CheckBox)c).Checked == true)
{
total += Convert.ToDouble(c.Tag);
}
}
}
}
}
tbComplementPrice.Text = string.Format("{0:F2}", total);
}
catch
{
MessageBox.Show("Error calculating the complement price", "Error", MessageBoxButtons.OK);
}
现在它可以执行我想要的操作,但是我仍然必须遍历所有组件才能找到CheckBoxes。有更好的解决方案吗?
答案 0 :(得分:1)
n
<dbl>
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
答案 1 :(得分:0)
我认为这会起作用
foreach(CheckBox c in groupBox1.Controls.OfType<CheckBox>())
{
c.Checked = true;
}