Vb.net 对列表框进行排序,但将项目分组在一起
我有一个问题,我需要在一个我知道怎么做的列表框中排序项目,但问题是,我的列表框是这样排序的 第一个人的名字Vb.net 对列表框进行排序,但将项目分组在一起,vb.net,Vb.net,我有一个问题,我需要在一个我知道怎么做的列表框中排序项目,但问题是,我的列表框是这样排序的 第一个人的名字 人1姓 人员1日期 第1人性别 人员1地址 第二个人的名字 人2姓 人员2日期 第2人性别 人员2地址 每个值都位于新行上。 我想要的是将每个人的5个细节放在一起,并按日期对它们进行排序,但我不确定如何做到这一点,因为我知道的唯一一个对细节进行排序的代码会混淆所有数据 Private Sub btnSortDate_Click(ByVal sender As System.Object,
人1姓
人员1日期
第1人性别
人员1地址
第二个人的名字
人2姓
人员2日期
第2人性别
人员2地址
每个值都位于新行上。 我想要的是将每个人的5个细节放在一起,并按日期对它们进行排序,但我不确定如何做到这一点,因为我知道的唯一一个对细节进行排序的代码会混淆所有数据
Private Sub btnSortDate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSortDate.Click
Dim arr As New ArrayList
Dim iLp As Integer
arr.AddRange(lstFDisplay.Items)
arr.Sort()
lstFDisplay.Items.Clear()
For iLp = 0 To arr.Count - 1
lstFDisplay.Items.Add(arr(iLp))
Next iLp
End Sub
编辑2:您需要将您的逻辑(您的人员、日期)与演示文稿(您在列表框中显示给用户的内容)分开。你应该经常避免的事情是显示一些东西(例如,显示人员列表),然后重新阅读并试图理解它
Module MyForm
' Keep our dates & people in this dictionary
' Because it's a SortedDictionary, it'll keep them sorted by key
' key, value
Public personDictionary As New SortedDictionary(Of DateTime, Person)
Public Sub New()
InitializeComponent()
' Call CreatePeople() to fill our dictionary when the form is made
CreatePeople()
' Then call FillListBox() to fill our listbox from that dictionary
FillListBox()
End Sub
Private Sub CreatePeople()
' Make your persons and dates here
Dim a = New Person(...)
Dim dateA = New DateTime(2012,2,3)
' Keep them in our internal dictionary
' .Add(..) takes our key (a DateTime) and a value (a Person)
personDictionary.Add(dateA, a)
End Sub
Private Sub FillListBox()
lstFDisplay.Clear()
' Here we do something 'For Each' item in the dictionary
' The dictionary is filled with 'pairs' of key|value (DateTime|Person)
For Each pair In personDictionary
DateTime date = pair.Key
Person person = pair.Value
'Use this data to add items to our UI
lstFDisplay.Items.Add("Name: "&person.Name
lstFDisplay.Items.Add("Address: "&person.Address
lstFDisplay.Items.Add(person.Name&" registered on "&date)
Next
End Sub
当您想添加或删除人员时,只需从字典中添加(…)或
。删除(…)
,然后再次调用FillListBox()
刷新您的UI。通过将值保存在代码本身中,而不是每次都从列表框中重新读取,您可以更好地控制如何处理这些信息。感谢您的回答,我认为您在vb方面比我有更多的知识,因此感谢您将我推向正确的方向。作为自定义类,这可以吗,正如我所认为的那样,这是可能需要的Public类Person Public Property firstname作为字符串Public Property lastname作为字符串Public Property性别作为字符串Public Property applicationdate作为日期Public Property address作为字符串Public Sub New(ByVal firstname作为字符串,可选ByVal lastname作为字符串=“无”,可选ByVal性别为String=“None”,可选ByVal应用日期为Date=Nothing,可选ByVal地址为String=“None”)
\u firstname=firstname\u lastname=lastname\u gender=gender\u applicationdate=applicationdate\u address=address End次公共重写函数ToString(),作为字符串返回String.Format(“{0},{1},{2}”,Me.lastname,Me.firstname,Me.applicationdate)End Function End Class
看起来像您需要的。尝试将其中的一些内容放入一个新字典(日期、人员)并调用.Sort(),然后通过它为每个内容手动添加属性,或者将您设置的自定义.ToString()添加到列表框的项中,应该就是这样。这是我感到困惑的部分,我不确定如何编写它,因为我一直在努力,却没有取得任何进展。