关闭程序后如何保持价值不变? VB.net

Posted

技术标签:

【中文标题】关闭程序后如何保持价值不变? VB.net【英文标题】:How can I keep value the same after closing the program? VB.net 【发布时间】:2014-04-03 13:49:28 【问题描述】:

一个测试分数与其他用户的分数一起存储并写入一个文本文件,并存储在一个变量中。

程序中有一个分数表格,它在进度表格中显示该用户所有测试的分数。它在我完成测试后工作,但是当我注销并关闭程序时,它会在标签中恢复为 0。

但是,当我关闭程序然后重新运行程序时,值会变回 0,而不是写入文本文件的实际测试分数。

当我为该用户运行程序时,如何使值保持不变?

创建结束子模块来存储公共变量Public Topic1Score As Integer

这是测试本身的代码摘录

If answers(i) = questions(i, 4) And FileOpenStatusTS = False Then
    Topic1Score += 1
    TotalScore += 1
End If
Next

If yearst = "12" And classst = "A" Then
    FileOpen(1, FileName12A1, OpenMode.Append)
    FileOpenStatus12A1 = True`

输入并检查完所有详细信息后,会将它们写入教师帐户文本文件

WriteLine(1, Username, Topic1Score, TotalScore)
FileClose(1)
End If

这是进度表中文件的读取。

Private Sub StProgress_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Debug.Assert(Not String.IsNullOrWhiteSpace(Topic1Score))
    lblTotalScore.Text = TotalScore

    LblTopic2Score.Text = "You scored " & Topic2Score & " out of 5"

    lblStName.Text = namest
    LblStSurname.Text = surnamest


    If yearst = "12" And classst = "A" Then
        Dim Filefound As Boolean
        Filefound = False
        FileOpen(1, FileName12A1, OpenMode.Input)
        While Not EOF(1) And Filefound = False


            Input(1, Username) 'All the details are read from that account from the 12A1 text file'
            Input(1, Topic1Score)
            Input(1, TotalScore)
            Filefound = True
            lblTopic1Score.Text = "You scored " & Topic1Score & " out of 5"
        End While
    End If

    If yearst = "13" And classst = "A" Then
        Dim Filefound As Boolean
        Filefound = False
        FileOpen(1, FileName13A1, OpenMode.Input)
        While Not EOF(1) And Filefound = False


            Input(1, Username) 'All the details are read from that account from the 12A1 text file'
            Input(1, Topic1Score)
            Input(1, TotalScore)
            Filefound = True
            lblTopic1Score.Text = "You scored " & Topic1Score & " out of 5"
        End While
    End If
    If yearst = "12" And classst = "B" Then
        Dim Filefound As Boolean
        Filefound = False
        FileOpen(1, FileName12B1, OpenMode.Input)
        While Not EOF(1) And Filefound = False
            Input(1, Username) 'All the details are read from that account from the 12A1 text file'
            Input(1, Topic1Score)
            Input(1, TotalScore)
            Filefound = True
            lblTopic1Score.Text = "You scored " & Topic1Score & " out of 5"
        End While
    End If
    If yearst = "13" And classst = "B" Then
        Dim Filefound As Boolean
        Filefound = False
        FileOpen(1, FileName13B1, OpenMode.Input)
        While Not EOF(1) And Filefound = False


            Input(1, Username) 'All the details are read from that account from the 12A1 text file'
            Input(1, Topic1Score)
            Input(1, TotalScore)
            Filefound = True
            lblTopic1Score.Text = "You scored " & Topic1Score & " out of 5"
        End While
    End If
End Sub`

最新代码... 测试中的代码... ` FileOpenStatusT = 假 Dim Filefound 为布尔值 文件发现 = 假 FileOpen(1, Filenamet, OpenMode.Input) 虽然不是 EOF(1) 并且 Filefound = False Input(1, Username) '所有详细信息都是从 TeacherAccounts 文本文件中的该帐户读取的' 输入(1,密码) 输入(1,姓名) 输入(1,姓氏)

        If Username = TxtUsername.Text And Password = TxtPassword.Text Then 'If the username and account entered are valid then the user is navigated to the TeacherMenu form'
            Filefound = True
            t = Username
        End If
    End While

    If Filefound = False Then
        MsgBox("Username and Password were not a match,please try again")
    Else
        TeacherMenu.Show()
        Me.Hide()
    End If`

进度表代码... 如果 yearst = "12" And classst = "A" 那么 Dim Filefound 为布尔值 文件发现 = 假 FileOpen(1, FileName12A1, OpenMode.Input) 虽然不是 EOF(1) 和 Filefound = False

            Input(1, Username) 'All the details are read from that account from the 12A1 text file'
            Input(1, Topic1Score)
            Input(1, TotalScore)
            Filefound = True
            If Username = t Then
                lblTopic1Score.Text = "You scored " & Topic1Score & " out of 5"
            End If

t 是一个字符串,在模块中设置为公共变量。

【问题讨论】:

请向我们展示您的代码。无法猜测发生了什么。 我重新编辑了代码 内容读取的代码是一样的——我建议你把文件名改成“case”或者“if”,但是使用相同的读取代码。 请不要使用Code。只需将您的代码缩进 4 个空格。您可以选择代码然后使用 Control-K。 【参考方案1】:

有 3 种不同的选项供您选择:

    使用文件系统,并为它创建一个文件(需要一些工作)。 如果我理解正确 - 这就是你所做的,并且你有一个错误......在调试它时获得帮助 - 发布代码。 我认为您的代码中的问题是您以附加模式打开文件。 您没有发布文件的读取内容,但我猜您在那里读取了第一个分数,而不是每次都写它 - 您在文件末尾写入。 所以你的文件可能看起来像这样: 0 1 2 而你总是阅读 0... 如果这不是问题 - 也发布阅读。

    使用注册表来保存变量(需要较少的工作)。

    使用用户区 app.config 来存储这些数据。 该区域与应用区域相反,可以由应用修改,并为每个用户单独保留。

我认为第三个是最简单和最快的。 祝你好运


所以我认为问题在于在文件读取中您没有“缩小”相关用户。

在这段代码中:

   Dim Filefound As Boolean
    Filefound = False
    FileOpen(1, FileName12B1, OpenMode.Input)
    While Not EOF(1) And Filefound = False
        Input(1, Username) 'All the details are read from that account from the 12A1 text file'
        Input(1, Topic1Score)
        Input(1, TotalScore)
        Filefound = True
-------IF THE Username == t here... - the currently logged in user ... run the following line
        lblTopic1Score.Text = "You scored " & Topic1Score & " out of 5"
-------IF the Username == the currently logged in user - break the loop
------- UNLESS - the last student record is necessary, since the grades were written in append mode

    End While

这应该可以解决问题。

它是一个练习系统,还是一个“真正的”系统? 我在问,因为允许从最终客户端访问保存用户数据的文件是不安全的……练习它是可以的,但是对于一个真实的系统,你需要更改架构。

【讨论】:

贴出涉及变量Topic1Score的代码 每个文件中只有一个用户吗? 否 每个班级,例如 12A1 都有一个包含所有分数的文本文件,以便教师可以登录并阅读每个班级和他们参加的测试的文本文件。 但是你有一个标签,你在每个循环中都要覆盖,所以最后一个学生被呈现......你应该实现一些东西来选择你想要显示的学生 这个表格是学生登录的,我刚才提到了教师登录​​来解释一下。这只是为了让参加过考试或以前参加过考试的学生可以看到分数。

以上是关于关闭程序后如何保持价值不变? VB.net的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vb.net 中完全关闭 SQLConnection 字符串?

VB.net:如果用户即将使用未保存的数据关闭他们的程序,我如何提示他们?

vb.net问题

发送 VB.NET 后电子邮件不保持格式

VB.NET CAD开发求助加载程序后如何设置为当前

我在春季启动中有一个兔子 amqp 侦听器,它在不关闭应用程序的情况下保持不变