【问题标题】:foreach fills from bottom to topforeach 从下到上填充
【发布时间】:2015-04-26 14:38:02
【问题描述】:

我的 foreach 走错路了。它现在从下到上设置模板,但这需要以相反的顺序进行

我添加了一个打印屏幕以使其清晰:

我知道的唯一解决方案是按名称一一选择它们,然后设置正确的答案,但我将如何配合呢?还是有办法让foreach朝着正确的“方向”前进

这是我正在使用的 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++;
}

【问题讨论】:

  • 我从不假设任何带有 foreach 循环的顺序,您需要确定您在 foreach 中使用了正确的标签。在这种情况下,它们的顺序很大程度上取决于您如何制作表格。它们可能按照您在设计器中的顺序、Z 顺序或偶然发生的顺序排列,并且您不能假设它总是倒退。使用控件的 .Tag 属性或以其他方式验证您是否拥有正确的属性。

标签: c# winforms search controls


【解决方案1】:

如果您确定它们总是完全相反的顺序,您可以随时将.Reverse() 添加到您的this.Controls.OfType&lt;Label&gt;... 查询中。有点丑陋和破解恕我直言,但应该可以工作。

一个不那么笨拙的解决方案是添加一个.OrderBy() 以使它们按照您希望它们出现的顺序出现。例如:

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

您还可以使用.OrderByDescending() 或使用OrderBy 的重载和自定义Comparer&lt;Label&gt; 类。

【讨论】:

  • OrderBy() 看起来很有趣。你能举个例子吗? (对不起,我是 C# 新手)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 2015-02-12
  • 2019-03-06
  • 2012-01-16
  • 1970-01-01
  • 2010-10-04
  • 2011-09-25
相关资源
最近更新 更多