单选按钮-检查是否选中-为什么前两个方法失败

本文关键字:方法 失败 两个 是否 检查 为什么 单选按钮 | 更新日期: 2023-09-27 17:50:59

我想知道为什么下面没有像预期的那样工作…如果If语句更改为(!ctrl.checked),则返回所有单选按钮的名称)

myForm f = new myForm();

        foreach (RadioButton ctrl in f.Controls.OfType<RadioButton>())
        {
            if (ctrl.Checked)
                MessageBox.Show(ctrl.Name);
        }

我也试过

        foreach (Control c in f.controls)
            if (c is radiobutton)
            {
                if (c.Checked)
                {
                    messagebox.show(c.name);
                }

,然后我把所有的单选按钮放在一个组框中,并使用下面的代码:

        foreach (RadioButton c in groupBox1.Controls)
        {
            if (c.Checked)
            {
                MessageBox.Show(c.Name);
            }
        }

it work fine.

这里有什么不同?

感谢您的帮助

单选按钮-检查是否选中-为什么前两个方法失败

我猜您的单选按钮是窗体以外的控件的子控件。您需要递归地搜索单选按钮。

    public void DisplayRadioButtons()
    {
        Form f = new Form();
        RecursivelyFindRadioButtons(f);
    }
    private static void RecursivelyFindRadioButtons(Control control)
    {
        foreach (Control childControl in control.Controls)
        {
            RecursivelyFindRadioButtons(childControl);
            if (childControl is RadioButton && ((RadioButton) childControl).Checked)
            {
                MessageBox.Show(childControl.Name);
            }
        } 
    }