0

私はテキストファイル形式を持っています:

  *******************************************************************************
    *                              Mitecs Test Plan                               *
    *******************************************************************************

    [PRODUCTN]
    FQA=3F.4.W0,41,1
    RSC=3F.5.W4,36,1
    CFG=3F.9.2J,234,1

    [MASTERREV]
    MTP=3F.R.WM

    [FQA 13]
    FQA=3F.4.W0,41,1
    CFG=3F.9.2J,263,1

    [FQA 14]
    FQA=3F.4.W0,160,1
    CFG=3F.9.2J,315,1

以下のように、テキストを読み込んでリストボックスに表示したい:

[PRODUCTN]
[MASTERREV]
[FQA 13]
[FQA 14]

上記画像より

上の画像から、リスト ボックス 1 で [FQA 14] アイテムを選択し、スワップ ボタンをクリックすると、リスト ボックス 2 に次の形式で表示されます。

Code    Name    Version
160     FQA      3F.4.W0
315     CFG      3F.9.2J
4

1 に答える 1

1

1 つのオプションは、クラスを使用して各エントリを保持し、ToString 関数をオーバーライドして見出しを返すことです。これで、各エントリを listbox1 に直接追加できるようになり、アイテムを表すタイトルが表示されます。各リストボックス項目は実際にはオブジェクトであるため、選択した項目をエントリ クラスとしてキャストし、オブジェクトからデータを読み取ることができます。これを行う1つの方法は次のとおりです。

Public Class Entry
    Public Property Title As String = ""
    Public Property Data As New List(Of String)
    Public Overrides Function ToString() As String
        Return Title
    End Function
End Class

Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim sr As New StreamReader("textfile1.txt")
    Do Until (sr.EndOfStream)
        Dim line As String = sr.ReadLine.Trim
        If line.StartsWith("[") Then
            Dim newentry As New Entry
            newentry.Title = line
            Do Until (line = "" OrElse sr.EndOfStream)
                line = sr.ReadLine.Trim
                If Not line = "" Then
                    newentry.Data.Add(line)
                End If
            Loop
            ListBox1.Items.Add(newentry)
        End If
    Loop
End Sub

Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    Dim selectedentry As Entry = DirectCast(DirectCast(sender, ListBox).SelectedItem, Entry)
    ListBox2.Items.Clear()
    For Each datum In selectedentry.Data
        Dim line As String() = datum.Split("=,".ToCharArray, StringSplitOptions.RemoveEmptyEntries)
        If line.Count > 2 Then
            ListBox2.Items.Add(line(2) + vbTab + line(0) + vbTab + line(1))
        Else
            ListBox2.Items.Add("   " + vbTab + line(0) + vbTab + line(1))
        End If
    Next
End Sub
于 2014-01-29T04:45:35.860 に答える