2012-10-14 3 views
2

Я попытался найти ответ по поисковому запросу, но не повезло. Я разработал форму с панелью, содержащую текстовые поля, чтобы я мог выполнять итерацию через свои элементы управления и сохранять каждое текстовое поле в массиве (чтобы я мог итерации массива, когда захочу), вещь я не мог найти, какое свойство панель знает как упорядочить порядок итерации элементов управления внутри него, который является первым, вторым и т. д. Я подумал, что это по тегу, но когда я изменил их по своему вкусу, это ничего не изменило. , так что мне интересно - как вы можете сказать, что итерация панели проходит через элементы управления, как вы предпочитаете? какое имущество вам нужно изменить?управление итерационной панелью

private void CreateTxtArr() 
{ 
    txts = new TextBox[8]; 
    for (int i = 0; i < pnlTxt.Controls.Count; i++) 
     txts[i] = (TextBox)pnlTxt.Controls[i]; 
} 
+0

Cab, пожалуйста, более подробную информацию о то, что вы пытаетесь сделать? Я понимаю, что вы пытаетесь получить эти текстовые поля в определенном порядке. Правильно? –

+0

Да, я действительно решил его, изменив его в дизайнере, но мне очень понравилось, что это хороший способ потратить время. – user1652656

+0

это то, что я пытаюсь сделать в целом: у меня есть datagrid, и я «привязываю» его к текстовым полям, поэтому мне хотелось бы, чтобы текстовые поля были в одном порядке у него на dg .. когда я использовал этот алгоритм, заказ был и я не знаю, какая внутренняя переменная является той, которая используется, когда вы перебираете панель (например, код выше). – user1652656

ответ

2

Вы можете использовать is оператор, чтобы проверить, если the child control панели isTextBox

private void CreateTxtArr() 
{ 
    txts = new TextBox[8]; 
    for (int i = 0; i < pnlTxt.Controls.Count; i++) 
     if(pnlTxt.Controls[i] is TextBox) 
       txts[i] = (TextBox)pnlTxt.Controls[i]; 
} 
+0

Вы также можете использовать ключевое слово Wanabrutbeer

+0

Да, что также можно использовать. – Adil

1

Если вы можете использовать .NET 3.5 или выше, вы можете сделать это довольно ровная с Linq:

private void CreateTxtArray() 
{ 
    // txts is an Array of TextBox 
    var txts = (from Control ctrl in pnlTxt.Controls 
       where ctrl is TextBox 
       select ctrl as TextBox).ToArray(); 
} 

Простой способ повторения, во всех случаях

EDIT: это старый ответ я забыл о, ниже есть еще более простой способ сделать это

private void CreateTxtArray() 
{ 
    // txts is an Array of TextBox 
    var txts = pnlTxt.Controls.OfType<TextBox>().ToArray(); 
} 
Смежные вопросы