2014-01-23 231 views
1

我有這段代碼,我試圖按字母順序對列表框進行排序。排序順序列表框

但是,當我嘗試對多個項目進行排序時,它會使搜索崩潰。

列表框有一個數值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 

有沒有更聰明的方法呢?

+1

請解釋您的意思是「它崩潰了搜索」。它以什麼方式崩潰?它會拋出異常還是顯示錯誤?如果是這樣,那麼這條消息是什麼?你有沒有堆棧跟蹤?如果是這樣,哪一行導致問題? –

+0

錯誤是:無法比較數組中的兩個元素。 就行了:listarray.Sort() – user3191666

+0

那麼,ListBox中的對象的類型是什麼? –

回答

2

的問題是,您要添加兩種不同類型的對象的列表,然後您嘗試使用默認的方法,該方法不處理比較不同類型對它們進行排序: 在設計時使用Sorted屬性彼此的對象。例如:

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! 
+1

歡呼聲 - 感謝您解決這個問題! – user3191666

2

ListBox可以自動排序。 Sorted=True'

+0

對不起,我正在兩個列表框之間移動一個項目,所以這不起作用。 – user3191666