2012-03-22 14 views
1

我有一个动态创建的窗体,在这个窗体上有几个单选按钮,它们是在运行时创建的。有这个形式,例如“下一步”按钮时就下用户点击我通过要循环,并检查一个单选按钮,检查之前,我继续,我已经试过如下:通过动态窗体和面板循环,并检查是否单选按钮检查

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."); 
        } 
       } 

      } 
     } 
    } 

亲切的问候 地理

回答

1

您可以使用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); 
+0

hi LB - iim对不起我试过你的建议,即使在检查了一个单选按钮后,它也没有返回任何成功的检查项目。 – 2012-03-22 13:44:19

+0

@geoNeo_我更新了答案 – 2012-03-22 14:00:17

+0

LB - 可以查看你来自哪里,但即使在调试时,如果检查无线电控制,即使在检查无线电之后,即使在检查无线电之后,即使调试仍然无法启动... odd(? ?) – 2012-03-22 14:15:14

0

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

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

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

_form.Controls.Find() 
+0

ioden hi no no that does not work soz - 可能是因为单选按钮嵌套在面板内吗?我确实提到这些单选按钮是动态创建的(?)。 – 2012-03-22 13:29:52

+0

尝试使用Controls.Find()方法 – ionden 2012-03-22 13:34:30

+0

ionden - 我可能已经解释了wrog我的歉意 - 在动态创建的窗体中创建单选按钮,动态创建所有控件(按钮,面板,单选按钮等) – 2012-03-22 13:43:17

0

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

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.. 
} 

你不必不必要有一个内环再次确认,如果控制是一个单选按钮。

+0

nawfal不是一个演员或在radio.checked ==真的缺少什么吗? cuz:错误'收音机'不存在 – 2012-03-22 14:13:26

+0

@geoNeo_你绝对正确。我错过了它。现在将编辑 – nawfal 2012-03-22 14:59:28

相关问题