C# - 根据标签值对控件进行排序

时间:2016-01-14 00:59:38

标签: c#

我有一个控件数量未知的面板。每个控件都有一个代表控件等级的标签。如何在面板中从最低到最高值订购控件?

例如,如果我有5个这样的标签:

  • 标签1:标签值= 10
  • 标签2:标签值= 40
  • 标签3:标签值= 2
  • 标签4:标签值= 16
  • 标签5:标签值= 22

如何实现这一结果:

  • 标签3( 2
  • 标签1( 10
  • 标签4( 16
  • 标签5( 22
  • 标签2( 40

3 个答案:

答案 0 :(得分:2)

var mySortedList = flpTest.Controls
.Cast<Control>()
.OrderBy(x => Convert.ToInt32(x.Tag))
.ToArray();
flpTest.Controls.Clear();
flpTest.Controls.AddRange(mySortedList);

答案 1 :(得分:0)

这是使用flowLayoutPanel的示例。不确定您的设置会如何影响它。

var mySortedList = flpTest.Controls.OfType<Label>().OrderBy(x => Convert.ToInt32(x.Tag)).ToList();
flpTest.Controls.AddRange(mySortedList.ToArray());

可能没有必要使用Clear。删除了foreach循环

答案 2 :(得分:0)

这种方式会更长一些,但可能更容易理解:

  1. 将控件复制到新数组中

  2. 按控件的标签对数组进行排序

  3. 将面板的控件设置为列表中的顺序控件

         Control[] controlArray = new Control[panel.Controls.Count];
         this.Controls.CopyTo(controlArray, 0);
         Array.Sort(
             controlArray,
             (c1, c2) => (int)c1.Tag - (int)c2.Tag
             );
         panel.Controls.Clear();
         panel.Controls.AddRange(controlArray);