0

我有一个问题,我需要整理列表框中的项目,我知道该怎么做,但问题是,我的列表框是这样整理的

人 1 名字
人 1 姓
人 1 日期
人 1 性别
人 1 地址
人 2 名字
人 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
4

1 回答 1

0

EDIT2:您需要将您的逻辑(您的人员,日期)与您的演示文稿(您通过放入列表框中向用户展示的内容)分开。您应该始终避免的事情是显示某些内容(例如,显示人员列表),然后将其读回并尝试理解它。

    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

当您想添加或删除人员时,只需.Add(..).Remove(..)从字典FillListBox()中再次调用以刷新您的 UI。通过将值保留在代码本身中,而不是每次都从列表框中重新读取它,您可以更好地控制如何处理该信息。

于 2012-08-11T14:27:25.680 回答