2016-05-11 6 views
2

У меня есть немного кода, который проходит через элементы управления groupBox и выбирает имя элемента управления. Затем он записывает имена в текстовое поле. Тем не менее, порядок, в котором они зацикливаются, должен соответствовать именам, gb1, gb2, gb3 ... Порядок, по которому они зацикливаются прямо сейчас, выглядит как порядок, в котором они были созданы (время). Я прибрал код дизайнера, поэтому создание элементов управления упорядочено так, как я его хочу, но, похоже, не имеет значения. Любые указатели? СпасибоЦитирование через элементы управления GroupBox в правильном порядке

private void loopThroughControls() 
    { 
     foreach (Control ctrl in this.Controls) 
      {     
      if (ctrl.ToString().StartsWith("System.Windows.Forms.GroupBox")) 
      { 
       txtEntry.Text += (ctrl.Text + System.Environment.NewLine); 
      } 
      } 
    } 
+0

Изменяется ли порядок при изменении номера индекса табуляции? – binaryBigInt

+0

Нет, и порядок вкладок задан правильно в любом случае. –

ответ

0

Чтобы расширить ответ Tomas':

private void LoopThroughControls() 
    { 
    foreach (var ctrl in this.Controls.OfType<GroupBox>().OrderBy(c => c.Name)) 
    { 
     txtEntry.Text += (ctrl.Text + System.Environment.NewLine); 
    } 
    } 

Это будет извлекать GroupBox экземпляры из Controls коллекции, то она сортирует их по имени, а затем он получает текстовое содержимое, как вы хотели ,

+0

Превосходно, я считаю, что это пример LINQ? (что я совершенно не осведомлен о любительском разработчике) –

+0

Да, это будет пример. Я довольно новичок в этом, исходя из среды WinForms 2.0 (но теперь в версии 4.6 WPF), но я очень быстро подхожу к ней. Есть некоторые сумасшедшие забавные примеры вложенных LINQ во всех переполнениях стека. Я уверен, что вы встретите их в своем путешествии по развитию. :-) –

0

Почему бы не просто отсортировать список перед повторением через него?

foreach (var ctrl in this.Controls.OrderBy(c => c.Name)) 
{ 
    // ... 
} 
+0

Спасибо, я мог бы это сделать. Но надеемся узнать что-то о том, как обрабатываются элементы управления. –

+1

Элементы управления добавляются в список 'Controls', когда они создаются, и этот список не переупорядочивается впоследствии. Если вы хотите, чтобы они были в определенном порядке, вам придется сортировать их самостоятельно. Структура обычно относится к элементам управления непосредственно по имени, которое фактически выполняет поиск в списке (хотя фактическая реализация скорее всего является хэш-поиском ...). –

+0

Полезно знать, спасибо –