2015-04-26 5 views
1

My foreach идет не так. Это теперь установка шаблон снизу вверх, но это должно идти в обратном порядкеforeach заполняет снизу вверх

Я добавил PrintScreen, чтобы понять:

Wrong order

Единственное решение, которое я знаю, чтобы выбрать их 1 по 1 по имени, а затем задайте правильный ответ, но как я могу это сделать? Или есть еще способ, чтобы позволить foreach идти вправо «направление»

это Еогеасп я использую:

var labels = this.Controls 
    .OfType<Label>() 
    .Where(l => l.Name.StartsWith("answer_")); 

int x = 1; 
foreach (Label l in labels) 
{ 
    int y = x * tafel; 
    l.Text = y.ToString(); 
    x++; 
} 
+0

Я никогда не предполагаю никакого заказа с петлей foreach, вам нужно определить, что вы используете правильную метку внутри foreach. Порядок, в котором они находятся, сильно зависит от того, как вы сделали форму в этом случае. Они могут быть в том порядке, в каком они есть у вас в дизайнере, по заказу Z или случайно, и вы не можете считать его всегда назад. Используйте свойство .Tag элемента управления или убедитесь, что у вас есть какой-то другой способ. –

ответ

3

Если вы уверены, что они всегда находятся в точном обратном порядке всегда может добавить .Reverse() к вашим запросам this.Controls.OfType<Label>.... Немного уродливый и взломать ИМХО, но должен работать.

Менее сложным решением было бы добавить .OrderBy(), чтобы они отображались в том порядке, в котором вы хотите, чтобы они отображались. Для примера:

this.Controls.OfType<Label>().OrderBy(l=>l.Text) 

Вы также можете использовать .OrderByDescending() или использовать перегрузку OrderBy с помощью пользовательского Comparer<Label> класса.

+0

'OrderBy()' выглядит интересно. Не могли бы вы привести пример? (извините, я новичок в C#) – Debreker

Смежные вопросы