对列表框的内容进行排序

时间:2014-08-20 10:54:17

标签: arrays vb.net listbox

我正在使用以下代码将项目添加到列表框中:

Dim i As Integer = 0
Dim temp As String

ListBox2.Items.Clear()
While i <= 9
    temp = Str(final_average(i)) + "        " + Str(i + 1) + "             " + Str(cals(i))
    ListBox2.Items.Add(temp)
    i = i + 1
End While

我想使用averagefinal_average(i)对此进行排序,但以下代码似乎不起作用:

Dim arr(ListBox2.Items.Count - 1) As Object

ListBox2.Items.CopyTo(arr, 0)
Array.Sort(arr)
ListBox2.Items.Clear()
ListBox2.Items.AddRange(arr)

如何对列表框的内容进行排序?

(注意:这不是作业,而是更大项目的一部分)。

2 个答案:

答案 0 :(得分:2)

这是正确的方法。

A. 首先创建列表项类。

Public Class MyListItem
    Implements IComparable(Of MyListItem)

    Public FinalAverage As Integer
    Public Number As Integer
    Public Cals As Integer

    Public Sub New(ByVal finalAverage As Integer, ByVal number As Integer, ByVal cals As Integer)
        Me.FinalAverage = finalAverage
        Me.Number = number
        Me.Cals = cals
    End Sub

    Public Overrides Function ToString() As String
        '' the way you want it to be shown in the listbox.
        Return String.Format("{0}        {1}             {2}", FinalAverage, Number, Cals)
    End Function

    Public Function CompareTo(ByVal other As MyListItem) As Integer Implements System.IComparable(Of MyListItem).CompareTo
        '' the way list items are compared for sorting... Return 0 for equal, -1 for smaller, +1 for bigger
        If Me.FinalAverage < other.FinalAverage Then Return -1
        If Me.FinalAverage > other.FinalAverage Then Return 1
        Return 0
    End Function
End Class

B。现在使用此类将项目添加到列表框中。

    Dim listItems As New List(Of MyListItem)
    For i As Integer = 0 To 9
        listItems.Add(New MyListItem(final_average(i), i + 1, cals(i)))
    Next
    listItems.Sort()
    ListBox2.DataSource = listItems

那就是它! :)

答案 1 :(得分:1)

我对你的问题有一个相当简单的解决方案!

方法1

1)对Listbox1中的项目进行排序:

我们会将Sorted的{​​{1}}属性设置为Listbox1。它将保留您未安全排序的旧列表!

True

2)将项目发送到listBox1.Sorted = True

将所有项目从Listbox2复制到listbox1,方法是将其保存到对象集合中。它们将按顺序移动,因此,第二个按照A-Z排序。

listbox2

3)按正确顺序将项目放入Dim objCollection As Object() = New Object(listBox1.Items.Count - 1) listBox1.Items.CopyTo(objCollection, 0) listBox2.Items.AddRange(objCollection)

我们都有Listbox1个已排序的项目。现在,我们需要做的就是按先前的顺序放置项目。正如我所说,我们会安全地存储您的商品展示位置,我们会将listbox的{​​{1}}属性设置为Sorted来检索它。

Listbox1

而且,您将获得一个排序False

方法2

您可以先将所有项目复制到listBox1.Sorted = False ,然后对listbox2进行排序,而不是排序然后复制然后解除listbox1。在这种情况下,不需要再次取消第一个!

我希望它完美无缺!