我有一个控件数量未知的面板。每个控件都有一个代表控件等级的标签。如何在面板中从最低到最高值订购控件?
例如,如果我有5个这样的标签:
如何实现这一结果:
答案 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)
这种方式会更长一些,但可能更容易理解:
将控件复制到新数组中
按控件的标签对数组进行排序
将面板的控件设置为列表中的顺序控件
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);