在用户控件中查找嵌套控件

Find nested Control inside a user control

您好,我有一个 面板 ,其中包含一个 usercontrol,其中包含一个 repeater有一个或多个复选框

我想获取面板中当前所有复选框的状态。

我当前的密码是

bool isChecked = false;

        foreach (Control control in pnlLoanProcess.Controls)
        {
            if (control is BookLoanActions)
            {
                BookLoanActions uc = (BookLoanActions)control;

                foreach (Control c in uc.Controls)
                {

                    if (c.GetType() == typeof(Repeater))
                    {
                        Repeater rptr = (Repeater)c;
                        foreach (Control c1 in rptr.Controls)
                        {
                            if (c1.GetType() == typeof(CheckBox))
                            {
                                CheckBox chkBox = (CheckBox)c1;
                                if (chkBox.Checked)
                                    isChecked = true;
                            }
                        }
                    }
                }
            }
        }

有shorter/better方法吗?

当然有...

foreach (var bla in pnlLoanProcess.Controls.OfType<BookLoanActions>())
{
    foreach (var rptr in bla.Controls.OfType<Repeater>())
    {
        isChecked = rtpr.Controls.OfType<CheckBox>().Any(c => c.IsChecked));
    }
}

您甚至可以使用一些聪明的 LINQ 来缩短它。