2013-04-21 25 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 
相關問題