显示文本文件中的某些项目
问题描述:
所以我有一个菜单栏和lstbox的窗体。在菜单栏上有3个选项的显示选项;所有,小说或非小说。文本文件按照该顺序具有书名,作者,类别(非易失性或非易失性),股票,价格。当用户点击全部显示时,我希望所有标题显示在列表框中。如果他们点击Nonfic,只是非小说标题,并与小说一样。这是到目前为止我的代码:显示文本文件中的某些项目
Private Sub menuDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuDisplay.Click
Dim books() As String = IO.File.ReadAllLines("Books.txt")
Dim data() As String
Dim allBooksTitle, allNonFicTitle, allFicTitle As String
For i As Integer = 0 To books.Count - 1
data = books(i).Split(","c)
allBooksTitle = data(2)
If data(2).Trim = "N" Then
allNonFicTitle = data(0)
ElseIf data(2).Trim = "F" Then
allFicTitle = data(0)
End If
Next
' show result
If menuDisplayAll.Checked Then
lstBox.Items.Add(allBooksTitle)
ElseIf menuDisplayFic.Checked Then
lstBox.Items.Add(allFicTitle)
ElseIf menuDisplayNonFic.Checked Then
lstBox.Items.Add(allNonFicTitle)
End If
End Sub
我不太知道如何编写代码只是无论是小说还是非小说类书籍的标题来显示和列表框到每个按钮之间的刷新,而不是增加了列表框。任何帮助大大apprecciated!
答
在此代码中显示数据的最佳方式是将显示代码移动到处理循环中。
Private Sub menuDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuDisplay.Click
Dim books() As String = IO.File.ReadAllLines("Books.txt")
lstbox.Items.Clear() 'remove all items from the listbox
For i As Integer = 0 To books.Count - 1
Dim data() As String 'Moved inside to limit scope
Dim allBooksTitle, allNonFicTitle As String
data = books(i).Split(","c)
allBooksTitle = data(2) 'store the two fields
allNonFicTitle = data(0)
If menuDisplayAll.Checked Then 'check for each item
lstBox.Items.Add(allBooksTitle)
ElseIf menuDisplayFic.Checked AndAlso data(2).Trim = "F" Then
lstBox.Items.Add(allNonFicTitle)
ElseIf menuDisplayNonFic.Checked AndAlso data(2).Trim = "N"Then
lstBox.Items.Add(allNonFicTitle)
End If
Next
End Sub
但是如果你使用.NET 3.5或更高版本可能是清洁剂使用LINQ
Private Sub menuDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuDisplay.Click
Dim books() As String = IO.File.ReadAllLines("Books.txt")
lstbox.Items.Clear()
Dim query As IEnumerable(Of String)
If menuDisplayAll.Checked Then 'check for each item
query = From book As String In books let data As String() = book.Split(',') Select data(0)
ElseIf menuDisplayFic.Checked
query = From book As String In books let data As String() = book.Split(',') Where data(2).Trim = "F" Select data(2)
ElseIf menuDisplayNonFic.Checked
query = From book As String In books let data As String() = book.Split(',') Where data(2).Trim = "N" Select data(2)
End If
lstBox.Items.AddRange(query)
End Sub