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)
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());
清除可能不是必需的。删除了每个循环
这种方式有点长,但可能更容易理解:
-
将控件复制到新数组中
-
按控件的标签对数组进行排序
-
将面板的控件设置为列表中的有序控件
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);