排序顺序列表框

时间:2014-01-23 14:24:16

标签: asp.net vb.net sorting arraylist listbox

我有这个代码,我试图按字母顺序对列表框进行排序。

但是,当我尝试对多个项目进行排序时,会导致搜索崩溃。

列表框包含数值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

这有更明智的方法吗?

2 个答案:

答案 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!