2014-01-23 2 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

두 가지 다른 유형의 개체를 목록에 추가하고 다른 형식을 비교하지 못하는 기본 방법을 사용하여 정렬하려고하면 문제가 발생합니다 서로의 물체를 예를 들어 :

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 속성을 사용하십시오. Sorted=True'

+0

죄송합니다. 두 개의 목록 상자간에 항목을 이동하므로 작동하지 않습니다. – user3191666