Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Переменная в имени другой

#c_sharp #wpf


Есть несколько textbox'ов: TextBoxTovar1, TextBoxTovar2 и т.д. Хочу пробежать по
ним циклом:

for (int i = 0; i < count; i++)
{
    Fill(TextBoxTovar[i].Text);
}


конструкция с квадратными скобками не работает. Как правильно записать?
    


Ответы

Ответ 1



В WinForms контролы на форме можно искать по имени: for (int i = 1; i <= count; i++) { Fill(((TextBox)Controls["TextBoxTovar" + i]).Text); } будут найдены только тектбоксы, лежащие непосредственно на форме. Если нужно искать во другом контейнере (например, панели) - то нужно использовать свойство Controls этого контейнера, а не свойство формы. Для WPF аналог Controls[name] это метод FindName у окна или любого другого контейнера: for (int i = 1; i <= count; i++) { Fill(((TextBox)FindName("TextBoxTovar" + i)).Text); } FindName работает рекурсивно, так что он найдет не только элементы, лежащие на самой форме, но и элементы во вложенных контейнерах.

Ответ 2



Очень странный вопрос. Без костыля тут не обойтись думаю. Но можно и при помощи Linq: foreach (TextBox tb in Controls.Cast().Where(x => x is TextBox).Select(x=>x as TextBox)){ // do something } Данный код переберет все TextBoxв форме. Надеюсь поможет. P.S если выберите этот вариант поиска, смогу более подробно рассказать/объяснить что к чему.

Комментариев нет:

Отправить комментарий