如何按复选框名称对复选框列表进行排序?

时间:2019-04-18 12:55:22

标签: c# list winforms sorting checkbox

我有一个foreach循环,其中用checkboxes中的groupbox填充了一个列表。问题在于它们是以随机顺序添加的。由于我以字母的升序命名它们,因此我想按它们的Name属性对其进行排序。

我已经尝试使用.Sort(),但是它没有任何作用。我也尝试使用Linq表达式DigBoxes = DigBoxes.OrderBy(x => x.Name).ToList();

但是它什么也没做...

这是我的代码:

GroupBox box = (GroupBox)e.Argument;
string DigInput = "";
List<CheckBox> DigBoxes = new List<CheckBox>();

foreach (Control c in box.Controls)
{
    if(c is CheckBox)
    {
        DigBoxes.Add(c as CheckBox);
    }
}
DigBoxes = DigBoxes.OrderBy(x => x.Name).ToList();

2 个答案:

答案 0 :(得分:2)

我要删除您在评论中提供的有关名称中包含数字的信息,所以我可能会不在这里。
根据您拥有的数量,您肯定会遇到问题。按Name排序是直接的字符串比较,也就是说,它不会以相同的方式考虑数值。

例如,假设您的集合由CheckBox_7CheckBox_10组成。如果要按数字顺序排列,则希望7排在10之前。字符串不是这种情况。在每个名称的索引9处,我们有一个7和一个1。7显然更大,这意味着"CheckBox_7"总体上将排在"CheckBox_10"之后。

如果要考虑数值,则需要解析名称,并在自定义排序方法中添加一些额外的知识。
这是一个类似问题。对于您的特定情况,这可能是一个很好的起点:sort string-numbers

答案 1 :(得分:0)

您尝试过这样的事情吗?

var items = CheckBoxList1.Items
            .Cast<ListItem>()
            .OrderBy(i=>i.Text)
            .ToArray();
        CheckBoxList1.Items.Clear();
        CheckBoxList1.Items.AddRange(items);