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()添加到列表框的项中,应该就是这样。这是我感到困惑的部分,我不确定如何编写它,因为我一直在努力,却没有取得任何进展。