通过一个dynamic的表单和面板循环,并检查单选button是否检查

我有一个dynamic创build的表单,在这个表单上有几个在运行时创build的单选button。 在这个表单上有一个button,例如“Next”,当用户点击下一个我想循环,并检查是否有一个单选button被选中之前,我已经尝试了以下几点:

void nextButton_Click(object sender, EventArgs e) { foreach (Control c in _form.Controls) { if (c is RadioButton) { RadioButton radio = c as RadioButton; if (radio is RadioButton) { if (radio.Checked == true) { //code continue to next } else { MessageBox.Show("You must select at least one."); } } } } } 

亲切的问候土力工程处

Solutions Collecting From Web of "通过一个dynamic的表单和面板循环,并检查单选button是否检查"

你可以使用Linq来简化它

 bool checked = _form.Controls.OfType<RadioButton>().Any(rb => rb.Checked); 

– 编辑 –

我更新了递归搜索所有控件的答案。

 bool IsChecked(Control parent) { if (parent.Controls.OfType<RadioButton>().Any(rb => rb.Checked)) return true; foreach (Control c in parent.Controls) if (IsChecked(c)) return true; return false; } bool checked = IsChecked(_form); 

如果其中一个无线电被选中,你应该退出循环,所以如果找到了一个退出条件。

  if (radio.Checked == true) { return; } else { MessageBox.Show("You must select at least one."); } 

为了找到嵌套控件,你应该使用:

  _form.Controls.Find() 

大概你的单选按钮躺在面板里面。 因此单选按钮被列在面板的控件集合中,而不是表单。 试试这个:

  private static void CheckRadioButton(Control control) { foreach (Control c in control.Controls) { if (c is RadioButton) { if (((RadioButton)c).Checked == true) { //code continue to next } else { MessageBox.Show("You must select at least one."); return; //should be } } else if (c.Controls.Count > 0) CheckRadioButton(c); } } 

现在通过传递form作为参数来调用这个方法。 像这样左右:

 void nextButton_Click(object sender, EventArgs e) { CheckRadioButton(this); //or whichever form it is.. } 

您不需要不必要的内部循环再次确认控件是否是单选按钮。