如何排序"排序" ListBox与第一项无序?

时间:2016-07-05 20:06:40

标签: c# winforms sorting listbox country

是否有一种简单的方法可以让Sorted ListBox自动放置特定的项目"首先" (按照通常的顺序)?例如,如果我有一个国家/地区名称的动态列表,但我首先想要一个特定的国家/地区。我是否只是覆盖 Sort()方法来实现它?

一种方法是启用 Sorted 属性,然后禁用它,然后Sort()方法可以选择所需的值并将其移动到Items集合中的第一个位置({{ 3}})。 这是执行此操作的最佳方式(或唯一方式)吗?

我过去常常通过在我的列表中首先在我想要的项目的开头嵌入一个空格(或两个)来使用手机中的联系人。 那还行吗?

2 个答案:

答案 0 :(得分:1)

如果您只想将项目添加到该列表一次,我建议创建一个包含所有非特殊值的列表,对其进行排序,然后在索引0处使用List.Insert(0, yourSpecialObj)添加特殊值

然后,您可以将这些项目放在列表框中。

答案 1 :(得分:0)

您可以通过实现自己的比较器并传入Sort方法来实现:

class Employee
{
    public string Name { get; set; }
    public int Salary { get; set; }
}

class Sorter : IComparer<Employee>
{
    public int Compare(Employee x, Employee y)
    {
        string nameAtTop = "Lucy";

        string xName = x.Name;

        if (x.Name.Equals(nameAtTop))
        {
            xName = "_";
        }

        string yName = y.Name;

        if (y.Name.Equals(nameAtTop))
        {
            yName = "_";
        }

        return (xName.CompareTo(yName));
    }
}

static void Main(string[] args)
{
    List<Employee> list = new List<Employee>();
    list.Add(new Employee() { Name = "Steve", Salary = 10000 });
    list.Add(new Employee() { Name = "Janet", Salary = 10000 });
    list.Add(new Employee() { Name = "Andrew", Salary = 10000 });
    list.Add(new Employee() { Name = "Bill", Salary = 500000 });
    list.Add(new Employee() { Name = "Lucy", Salary = 8000 });

    Sorter sorter = new Sorter();
    list.Sort(sorter);

    foreach (var element in list)
    {
        Console.WriteLine(element.Name);
    }
}