如何在C#中对listBox进行排序?

时间:2016-09-04 18:18:58

标签: c# listbox

我在文本框中输入了数字并将它们添加到了listBox中。现在我需要订购该列表框。这是我的尝试:

int[] array = listBox1.Items.Cast<int>().ToArray<int>();
Array.Sort(array);
listBox1.Items.Clear();
foreach (int item in array)
{
    listBox1.Items.Add(item);
}

抛出'System.InvalidCastException'。但我无法弄清楚如何解决它。

4 个答案:

答案 0 :(得分:0)

这就像

一样简单
listBox1.Sorted = true;

<强>更新

var array = new object[listBox1.Items.Count];
listBox1.Items.CopyTo(array, 0);
listBox1.Items.Clear();
var sortedArray = array.Select(n => (object)Convert.ToInt32(n)).OrderBy(n => n).ToArray();
listBox1.Items.AddRange(sortedArray);

答案 1 :(得分:0)

您可以使用lambda

var array = listBox1.Items.OfType<string>().Select(x => int.Parse(x))
                             .ToArray();

答案 2 :(得分:0)

首先,我想说在控件中存储数据不是一个好主意。始终将数据放在可以处理它们的类型中,如List,Dictionary等,然后将其绑定到listbox对象。我想你正在开发Windows窗体。然后在表单中添加一个属性并将所有数据放入其中。

类似这样的事情

public partial class Form1 : Form
{
List<string> _items = new List<string>(); // <-- Add this

public Form1()
{
    InitializeComponent();

    _items.Add("One"); // <-- Add these
    _items.Add("Two");
    _items.Add("Three");

    listBox1.DataSource = _items;
}
public void add()
{
 _items.Add("four");
 _items.Sort();
}
}

答案 3 :(得分:0)

ListBox项目可以转换为字符串。因此,您必须将其强制转换为string [],然后转换为int [],然后对其进行排序,最后将已排序的数据添加到ListBox。

        string[] strArray = listBox1.Items.Cast<string>().ToArray();
        int[] intArray = strArray.Select(x => int.Parse(x)).ToArray();
        Array.Sort(intArray);
        listBox1.Items.Clear();
        foreach (int item in intArray)
        {
            listBox1.Items.Add(item);
        }

我希望这会有用。