我有这个代码,我试图按字母顺序对列表框进行排序。
但是,当我尝试对多个项目进行排序时,会导致搜索崩溃。
列表框包含数值ID和文本项。
Sub sortListBoxItems(ByRef box As ListBox)
'sorts listbox
Dim listarray As New ArrayList()
Dim loopitem As Integer
For loopitem = 0 To box.Items.Count - 1
listarray.Add(box.Items(loopitem))
Next
listarray.Sort()
box.Items.Clear()
For loopitem = 0 To listarray.Count - 1
box.Items.Add(listarray(loopitem))
Next
End Sub
这有更明智的方法吗?
答案 0 :(得分:2)
ListBox可以自动排序。
在设计时使用Sorted属性:Sorted=True'
答案 1 :(得分:2)
问题是您要向列表中添加两种不同类型的对象,然后您尝试使用默认方法对它们进行排序,该方法无法相互比较不同类型的对象。例如:
Dim list As New ArrayList()
list.Add("Two")
list.Add(1)
list.Sort() ' Throws an InvalidOperationException ("Failed to compare two elements in the array.")
但是,您可以实现自己的IComparer
类,它将处理多种类型,例如:
Public Class MyComparer
Implements IComparer
Public Function Compare(x As Object, y As Object) As Integer Implements IComparer.Compare
Return x.ToString().CompareTo(y.ToString())
End Function
End Class
然后,您可以对列表进行排序,如下所示:
Dim list As New ArrayList()
list.Add("Two")
list.Add(1)
list.Sort(New MyComparer()) ' Works!