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

时间:2018-02-27 05:14:02

标签: c# user-controls controls

您好我有面板,其中包含用户控件,其中包含转发器,可以有一个或多个复选框

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

我目前的代码是

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

有更短/更好的方法吗?

1 个答案:

答案 0 :(得分:0)

当然,有......

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缩短它。