0

質問があります。リスト ボックス内の項目を並べ替える必要がありますが、方法はわかっていますが、問題は、リスト ボックスが次のように並べ替えられていることです。

Person 1
の名 Person 1 の姓
Person 1 の日付
Person 1 の性別
Person 1 の住所
Person 2 の名前 Person
2 の姓
Person 2 の日付
Person 2 の性別
Person 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(..)呼び出して、UIを更新します。FillListBox()毎回リストボックスから値を再読み込みするのではなく、コード自体に値を保持することで、その情報の処理方法をより細かく制御できます。

于 2012-08-11T14:27:25.680 に答える