关闭程序后如何保持价值不变? 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 字符串?