如何遍历表单上的所有复选框?

我有一个包含许多动态生成的复选框的表单。 在运行时,我如何迭代它们中的每一个,以便获得它们的值和ID?

foreach(Control c in this.Controls) { if(c is CheckBox) { // Do stuff here ;] } } 

我使用一个简单的扩展方法,适用于任何控件类型:

  public static IEnumerable AllControls(this Control startingPoint) where T : Control { bool hit = startingPoint is T; if (hit) { yield return startingPoint as T; } foreach (var child in startingPoint.Controls.Cast()) { foreach (var item in AllControls(child)) { yield return item; } } } 

然后,您可以像这样使用它:

 var checkboxes = control.AllControls(); 

使用IEnumerable可以选择如何存储结果,还可以使用linq:

 var checkedBoxes = control.AllControls().Where(c => c.Checked); 

如果是Windows窗体 ,您可以尝试这样的事情:

 private void button1_Click(object sender, EventArgs e) { Dictionary checkBoxes = new Dictionary(); LoopControls(checkBoxes, this.Controls); } private void LoopControls(Dictionary checkBoxes, Control.ControlCollection controls) { foreach (Control control in controls) { if (control is CheckBox) checkBoxes.Add(control.Name, ((CheckBox) control).Checked); if (control.Controls.Count > 0) LoopControls(checkBoxes, control.Controls); } } 

请记住容器控件可以包含子项,因此您可能也想检查它们。

像这样,也许(如果它在Windows窗体中 ):

 foreach(var checkBox in myForm.Controls.OfType()) { //Do something. } 

创建它们后,获取值的引用列表,然后您可以遍历列表。

我知道这很古老,但我想象的很容易。

只需将所有复选框添加到List ,所有复选框状态都在列表中,即使它们在列表中的UI更改也会更改。

 List checkboxes = new List(); checkboxes.Add(chk1); checkboxes.Add(chk2); //So add all checkboxes you wanna iterate foreach(Checkbox checkbox in checkboxes){ //Do something using checkbox object } 

希望这可以帮助 :)