0

Есть программа, при определенных чекбоксах пользователю отображаются только некоторые текстбоксы, существующие на форме. Как мне программно проверить, не пусты ли они, когда пользователь нажимает на кнопку считывания информации со всех visible текстбоксов?

Просто, не хочется делать в лоб - 4 проверки (так как 4 возможных появления текстбоксов на форме).

3 ответа 3

2

Не помню уже всех подробностей WPF (не уверен в свойствах Controls и IsVisible), но примерно так:

foreach (var textbox in rootControl.Controls.OfType<TextBox>().Where(t => t.IsVisible))
{
    // проверка на заполненность
}
3
  • rootControl не существует в данном контексте 27 мар 2015 в 15:43
  • Это условное название того контрола, в котором лежат ваши текстбоксы. Подставьте туда, что нужно.
    – andreycha
    27 мар 2015 в 17:56
  • Спасибо,К сожалению работаю с WPF,а не WinForms. Ваш Код нужно изменить,сейчас пытаюсь это сделать. Пока получилось так foreach (TextBox tb in this.FindName.OfType<TextBox>().Where(tb => tb.IsVisible)) { } Но все еще не работает 28 мар 2015 в 4:38
2

Тебе понадобится хелпер метод:

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject d)
   where T : DependencyObject
{
    if (d != null)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(d); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(d, i);
            if (child != null && child is T)
            {
                yield return (T)child;
            }

            foreach (T childOfChild in FindVisualChildren<T>(child))
            {
                yield return childOfChild;
            }
        }
    }
}

и затем в форме пишешь:

var visibleTextBoxes = FindVisualChildren<TextBox>(this).Where(tb => tb.IsVisible);
foreach (var textBox in visibleTextBoxes)
{
    //проверка
}
1

Если у вас версия .Net выше 3, то можете использовать такой код:

    foreach (TextBox tb in this.Controls.OfType<TextBox>())
    {
        if (tb.Visible && String.IsNullOrEmpty(x.Text))
        {
            // Код обработки
        }
    }

Если версия .Net ниже 3, то такой:

    foreach (Control cont in Controls)
    {
        if (cont is TextBox)
        {
            TextBox x = (TextBox)cont;

            if (x.Visible && String.IsNullOrEmpty(x.Text))
            {
                // Код обработки
            }
        }
    }
1
  • (TextBox tb in this.Controls.OfType<TextBox>()) Ругается на Controls 27 мар 2015 в 15:42

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.