none
Как перебрать только элементы управления TextBox на форме. RRS feed

  • Вопрос

  • Добрый день,

    На форме есть множество элементов управления.

    Мне нужно обработать только TextBox элементы управления.

    Пока перебираю все подряд (кнопки, датагрид, техтбокс) и ищу по имени элемента управления (благо, что техтбох имеет типовое имя).

    foreach (Control control in this.tabPage.Controls)

    if (control.Name.Substring(6) == dataColumn.ColumnName)
     {
       что-нибудь делаем...
     }
    }

    Как можно перебрать только TexBox, не перебирая остальные элементы управления?

    Заранее благодарен.

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 21:08 MSDN Forums consolidation (От:Visual C#)
    23 сентября 2010 г. 6:02

Ответы

  • Можете воспользоваться оператором is

     

    foreach (Control control in this.tabPage.Controls)

    if (!(control is TextBox)) //Если control не TextBox, то переходим к следующей итерации.

    continue;

    if (control.Name.Substring(6) == dataColumn.ColumnName)
     {
       что-нибудь делаем...
     }
    }

    • Помечено в качестве ответа EgoZa 23 сентября 2010 г. 7:22
    23 сентября 2010 г. 6:59
  • Нет, такой коллекции нет. Конечно, вы можете ее создать сами, например List<TextBox> и заполнить ее всеми нужными TextBox, после чего использовать на свое усмотрение, но на мой взгляд,проще обойтись is.
    • Помечено в качестве ответа EgoZa 23 сентября 2010 г. 7:22
    23 сентября 2010 г. 7:21

Все ответы

  • Можете воспользоваться оператором is

     

    foreach (Control control in this.tabPage.Controls)

    if (!(control is TextBox)) //Если control не TextBox, то переходим к следующей итерации.

    continue;

    if (control.Name.Substring(6) == dataColumn.ColumnName)
     {
       что-нибудь делаем...
     }
    }

    • Помечено в качестве ответа EgoZa 23 сентября 2010 г. 7:22
    23 сентября 2010 г. 6:59
  • А есть коллекция для TexBox? Хочу сократить цикл foreach и выбрать только texbox, а не все controls?

    Что нибудь похожее на:

    foreach (TextBoxs textBoxs in this.tabPage.Controls.TexBoxs)
    {} 

    23 сентября 2010 г. 7:08
  • Нет, такой коллекции нет. Конечно, вы можете ее создать сами, например List<TextBox> и заполнить ее всеми нужными TextBox, после чего использовать на свое усмотрение, но на мой взгляд,проще обойтись is.
    • Помечено в качестве ответа EgoZa 23 сентября 2010 г. 7:22
    23 сентября 2010 г. 7:21
  • Спасибо.

    23 сентября 2010 г. 7:22
  • Можно еще использовать Linq, чтобы получить все TextBox, например.

    var textBoxes = this.tabPage.Controls.Where(c=>c is TextBox);


    23 сентября 2010 г. 7:24