我发现在计算器上How to get all childControls of a type on a form一个问题,它扩展到算选中的元素。
private void button1_Click(object sender, EventArgs e)
{
label1.Text = (from c in GetAll(this, typeof(CheckBox))
where (c as CheckBox).Checked
select c).Count().ToString();
}
// credits go to @PsychoCoder for this part
public IEnumerable<Control> GetAll(Control control, Type type)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => GetAll(ctrl, type))
.Concat(controls)
.Where(c => c.GetType() == type);
}
总的来说,我认为这个片段应该做的伎俩,你不必Concat的所有groupBoxes!
编辑
适应于计数所有的表格上选中的复选框,无论复选框都childControls与否。
Type type = typeof(CheckBox);
var controls = this.Controls.Cast<Control>();
label1.Text = controls.SelectMany(ctrl => GetAll(ctrl))
.Concat(controls)
.Where(c => c.GetType() == type && (c as CheckBox).Checked)
.Count().ToString();
*但这并没有按预期那样工作。*发生了什么? – McGarnagle
我真的很抱歉,我只是试了一遍,它的工作。 我不确定我第一次做了什么。 – user1681394