Перебор controls в c#

Рейтинг: 1Ответов: 1Опубликовано: 07.05.2011

Простая задача — перебрать все флажки в данной форме и данном табе и отметить их как не выбранные. Нашел на мой взгляд правильное решение:

        foreach (Control c in this.Controls)
        {
            CheckBox cb = c as CheckBox;
            if (cb != null && cb.Checked)
            {
               cb.Checked = false;
            }

        }

Но оно не работает! И я не понимаю почему. Смотрел отладчиком - cb = null. Почему так может быть? В какую сторону копать?..

Ответы

▲ 4Принят

По-моему дело в рекурсии. Должно работать

private void button1_Click(object sender, EventArgs e)
    {
        foreach (Control control in this.Controls) {
            this.UncheckAllCheckBoxes( control );
        }
    }

    private void UncheckAllCheckBoxes(Control control)
    {
        foreach (Control c in control.Controls) {
            this.UncheckAllCheckBoxes( c );
        }

        var cb = control as CheckBox;

        if (cb != null && cb.Checked)
            cb.Checked = false;
    }