Visual Basic顺序访问文件

时间:2015-04-12 02:23:17

标签: vb.net

我已经做了很长一段时间了,但我几乎把头发撕掉了。在任何人开枪并且说我正在寻找关于任务的免费讲义之前,请注意,我完成了90%的任务!该计划在列表中有4个商业广告,您可以选择投票的广告,并保存您的投票并统计它。由于它在程序中统计,它还将其保存到文件中。下次打开文件时,您可以点击“显示投票”,它会读取文件,并为用户重新计算所有内容。

Image of OP's Form

这是程序的样子,至少是我所做的。我的问题是,当我点击显示投票时,没有任何反应。它不会读取文件中的任何内容。我使用一个消息框测试它是否显示文件中的任何内容,它确实显示项目中的第一个项目。有人有什么想法吗?!

Public Class frmMain

Dim intVotes(3) As Integer


Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    lstCom.Items.Add("Budweiser")
    lstCom.Items.Add("FedEx")
    lstCom.Items.Add("E*Trade")
    lstCom.Items.Add("Pepsi")
    lstCom.SelectedIndex = 0

End Sub

Private Sub btnSaveVote_Click(sender As Object, e As EventArgs) Handles btnSaveVote.Click


    Dim outFile As IO.StreamWriter
    Dim intSub As Integer




    intSub = lstCom.SelectedIndex

    If intSub <= intVotes.GetUpperBound(0) Then
        intVotes(intSub) += 1

        If IO.File.Exists("CallerVotes.txt") Then
            outFile = IO.File.CreateText("CallerVotes.txt")
            If lstCom.SelectedIndex = 0 Then
                outFile.WriteLine("Budweiser")
            ElseIf lstCom.SelectedIndex = 1 Then
                outFile.WriteLine("FedEx")

            ElseIf lstCom.SelectedIndex = 2 Then
                outFile.WriteLine("E*TRADE")
            ElseIf lstCom.SelectedIndex = 3 Then
                outFile.WriteLine("Pepsi")
            End If
            outFile.Close()
        End If
    End If


    lblBud.Text = intVotes(0).ToString
    lblFed.Text = intVotes(1).ToString
    lblET.Text = intVotes(2).ToString
    lblPep.Text = intVotes(3).ToString


End Sub

Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstCom.SelectedIndexChanged


End Sub

Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
    Me.Close()
End Sub

Private Sub btnDisplayVote_Click(sender As Object, e As EventArgs) Handles btnDisplayVote.Click



    Dim inFile As IO.StreamReader
    Dim strText As String

    If IO.File.Exists("CallerVotes.txt") Then
        inFile = IO.File.OpenText("CallerVotes.txt")
        Do Until inFile.Peek = -1
            strText = inFile.ReadLine
            If strText = "Budweiser" Then
                intVotes(0) += 1
            ElseIf strText = "FedEx" Then
                intVotes(1) += 1
            ElseIf strText = "E*TRADE" Then
                intVotes(2) += 1
            ElseIf strText = "Pepsi" Then
                intVotes(3) += 1
            End If
        Loop
        inFile.Close()
    End If

End Sub
End Class

2 个答案:

答案 0 :(得分:1)

我认为您的问题是您没有将intVotes数组中的值分配给标签。在btnDisplayVote_Click结束时尝试添加

lblBud.Text = intVotes(0).ToString
lblFed.Text = intVotes(1).ToString
lblET.Text = intVotes(2).ToString
lblPep.Text = intVotes(3).ToString

答案 1 :(得分:1)

如果你查看你的文件,我想你会看到你只有一个条目。每次使用CreateText方法单击“保存”按钮时,都会覆盖文件。

来自MSDN的

强调我的

  

此方法等效于StreamWriter(String,Boolean)构造函数重载,append参数设置为false。如果path指定的文件不存在,则创建该文件。如果文件存在,其内容将被覆盖

请尝试使用AppendText方法。

If IO.File.Exists("CallerVotes.txt") Then
            outFile = IO.File.AppendText("CallerVotes.txt")

您还需要根据DeanOC的答案将您读入的值分配给相应的标签。