我正在使用以下代码将项目添加到列表框中:
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
我想使用average
或final_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)
如何对列表框的内容进行排序?
(注意:这不是作业,而是更大项目的一部分)。
答案 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)对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
!
您可以先将所有项目复制到listBox1.Sorted = False
,然后对listbox2
进行排序,而不是排序然后复制然后解除listbox1
。在这种情况下,不需要再次取消第一个!
我希望它完美无缺!