0

我是为窗口形式编写 C# 程序的新手。当我使用 { Detail_ListBox.Sorted = true; 以升序对我的 ListBox 进行排序,但我得到的不是我想要的
-1
-2
-3
0
1
2
3

它能够对正值进行排序,但我想将负值和正值排序为
-3
-2
-1
0
1
2
3
这只是一个示例,实际值可以包括从 -300 到 +300。任何人都可以帮助我我应该使用哪些语句来对 -ve 和 +ve 值进行排序?

4

3 回答 3

1

当您使用 { Detail_ListBox.Sorted = true; } 它像字符串一样对值进行排序。您应该首先对 int 值进行排序,然后将它们放入 ListBox 而不使用 Detail_ListBox.Sorted = true;

于 2013-11-10T14:03:45.230 回答
0

如果你有一个整数列表,像这样:

List<int> integers = somelist;

您可以使用以下命令对其进行排序:

integers.Sort();

然后分配给列表框:

Detail_ListBox.DataSource = integers;

或者:

Detail_ListBox.Items = integers.Select(x => x.ToString()).ToArray();
于 2013-11-10T15:01:34.130 回答
0

如果你ListBox有一些DataSource,你可以尝试排序DataSource。如果没有,您可以尝试此扩展方法:

public static class ListBoxExtension
{
    public static void SortBy<TElement>(this ListBox list,
                              Func<TElement, object> fieldSelector)
    {
        var items = list.Items.OfType<TElement>()
                        .OrderBy(fieldSelector)
                        .Cast<object>().ToArray();
        list.BeginUpdate();
        list.Items.Clear();
        list.Items.AddRange(items);
        list.EndUpdate();
    }
    public static void SortByDescending(this ListBox list,
                                        Func<TElement, object> fieldSelector)
    {
        var items = list.Items.OfType<TElement>()
                        .OrderByDescending(fieldSelector)
                        .Cast<object>().ToArray();
        list.BeginUpdate();
        list.Items.Clear();
        list.Items.AddRange(items);
        list.EndUpdate();
    }           
}

//Usage
listBox1.SortBy<object>(x=>x);
//if your listBox1 has elements of the same type Item, use it like this:
listBox1.SortBy<Item>(x=>x.SomeProperty);
于 2013-11-10T15:25:53.340 回答