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

本文关键字:控件 排序 | 更新日期: 2023-09-27 18:30:18

我有一个面板,其中包含未知数量的控件。每个控件都有一个表示控件等级的标记。如何从最低值到最高值对面板中的控件进行排序?

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

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

我怎样才能达到这个结果:

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

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

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

一个使用 flowLayoutPanel 的示例。不确定您的设置会受到怎样的影响。

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

清除可能不是必需的。删除了每个循环

这种方式有点长,但可能更容易理解:

  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);