使用ListBox中的项目作为Int

时间:2017-10-26 22:20:12

标签: c# arrays sorting visual-studio-2010 listbox

解释此WindowsFormAplication: 我有两个按钮,一个用于在listbox1中插入带有文本框的数字,并且工作正常,第二个按钮用于排序来自listbox1(数字)的元素为 int 数组 listbox2 。需要 int 数组,因为如果我将其排序为 string 然后,如果我有 3,2,10 作为我在listbox中的元素,它会将其排序为 10,2,3 ,因为它的字符串, 现在我在我的排序按钮中有这个代码,我从列表框元素中创建了 list 并将其排序为字符串,并且不知道如何将列表转换为数组或int:

private void button2_Click(object sender, EventArgs e)
    {
        List<String> lista = new List<string>();

        foreach (String x in listBox1.Items)
        {
            lista.Add(x);
        }
        lista.Sort();
        foreach (string a in lista)
        {
            listBox2.Items.Add(a);
        }
    }

3 个答案:

答案 0 :(得分:1)

您可以将比较委托传递给lista.Sort()方法,该方法将项目转换为整数并按其数值对其进行排序。像这样:

lista.Sort((a, b) =>
{
    return Convert.ToInt32(a).CompareTo(Convert.ToInt32(b));
});

请注意,这并不会检查转换是否有效或类似。

答案 1 :(得分:0)

我自己找到了解决方案,所以这就是代码:

private void button2_Click(object sender, EventArgs e)
    {
        List<int> lista = new List<int>();

        foreach (string x in listBox1.Items)
        {
            lista.Add(Convert.ToInt32(x));
        }
        lista.Sort();
        foreach (int a in lista)
        {
            listBox2.Items.Add(a);
        }
    }

我希望有人觉得这很有帮助。

答案 2 :(得分:0)

ListBox接受任何类型的元素,而不仅仅是字符串。因此,您可以直接添加int。无需转换为字符串。然后,您可以再次检索整数。

但是,我会将值存储在列表中,而不是存储在列表框的items集合中。

private List<int> numbers = new List<int>();

private void btnAdd_Click(object sender, EventArgs e)
{
    if(Int32.TryParse(TextBox1.Text, out int n)) {
        numbers.Add(n);
        listBox1.DataSource = null;
        listBox1.DataSource = numbers;
    } else {
        MsgBox.Show("You must enter an integer!");
    }
}

private void btnSort_Click(object sender, EventArgs e)
{
    numbers.Sort();
    listBox1.DataSource = null;
    listBox1.DataSource = numbers;
}

设置列表框的DataSource不会将项目插入列表框,而是告诉列表框显示集合中的元素而不是其自己的内部集合。

如果两次分配相同的列表,列表框将不会注意到列表的内容已更改。因此,请先指定null