解释此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);
}
}
答案 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
。