我知道你可以设置一个ListBox来自动排序。有没有办法“捕获”排序,以便当ListBox交换两个项目的位置,以便我可以在另一个列表框上进行相同的重新排序?我希望按值排序一个列表框,但将这些值保持在相同的相对索引位置,而不是其他地方的另一个ListBox。
我可以编写一个例程来对列表进行冒泡排序,这样我就可以自己进行更改,但是我想知道是否有更自动化,因为我可能不得不在程序中的几个不同位置执行此操作。
答案 0 :(得分:0)
不幸的是,Sorted
属性不使用IComparable
接口实现,只根据项目ToString
的结果进行排序。但是,您可以使用排序数据源(例如Sorted
)而不是设置List<>
属性。
为ListBox
中的项创建一个包装类,并在其上实现IComparable<T>
接口。使用这些List<>
实例填充ListBoxItem
,然后在列表中调用Sort
方法。因此,您可以发送CompareTo
来电。
public partial class Form1 : Form
{
private class ListBoxItem<T> : IComparable<ListBoxItem<T>>
where T : IComparable<T>
{
private T item;
internal ListBoxItem(T item)
{
this.item = item;
}
// this makes possible to cast a string to a ListBoxItem<string>, for example
public static implicit operator ListBoxItem<T>(T item)
{
return new ListBoxItem<T>(item);
}
public override string ToString()
{
return item.ToString();
}
public int CompareTo(ListBoxItem<T> other)
{
return item.CompareTo(other.item); // here you can catch the comparison
}
}
public Form1()
{
InitializeComponent();
var items = new List<ListBoxItem<string>> { "Banana", "Apple"};
items.Sort();
listBox1.DataSource = items;
}