Привет, у меня есть панель , которая содержит пользовательский элемент управления , содержащий повторитель , который может иметь один или несколько флажков .

Я хочу получить статус всех флажков, которые в данный момент находятся на панели.

Мой текущий код

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

Есть ли более короткий / лучший способ сделать это?

0
Samra 27 Фев 2018 в 08:14

1 ответ

Лучший ответ

Конечно, есть ...

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.

0
Ron Beyer 28 Фев 2018 в 06:59