2013-04-21 32 views
0

所以我有一个菜单栏和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!

回答

0

在此代码中显示数据的最佳方式是将显示代码移动到处理循环中。

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 
相关问题