如果标题有点模糊,我很抱歉,我一天只在这里。
所以我的问题是我有一个菜单表单,我从组合框中输入选项。然后我转到下一个显示相关导入文本文件信息的表单。 但是,当我单击“返回”按钮返回菜单并在组合框中输入不同的信息时,它不会将我带到正确的文本文件信息,它只显示上一个选择的信息。
下面是学生菜单下一个按钮的代码:
If OptionBox.Text = "Introduction" Then
Introduction.Show()
Else
If OptionBox.Text = "Explanation" Then
Explanation.Show()
End If
End If
End Sub
下面是文本文件表单加载页面和后退按钮
的代码Private Sub Introduction_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Student_Menu.Hide()
Dim font As New System.Drawing.Font("Calibri", 11)
If Student_Menu.TopicSelect.Text = "Computer Systems" Then
Dim strFile As String = "C:\Users\Sales\Documents\Visual Studio 2010\Projects\gcsecomputingtask\textfiles\Introduction\ComputerSystems.txt"
Dim sr As New IO.StreamReader(strFile)
IntroductionLabel.Text = sr.ReadToEnd()
sr.Close()
Else
If Student_Menu.TopicSelect.Text = "Hardware" Then
Dim strFile As String = "C:\Users\Sales\Documents\Visual Studio 2010\Projects\gcsecomputingtask\textfiles\Introduction\Hardware.txt"
Dim sr As New IO.StreamReader(strFile)
IntroductionLabel.Text = sr.ReadToEnd()
sr.Close()
Else
If Student_Menu.TopicSelect.Text = "Software" Then
Dim strFile As String = "C:\Users\Sales\Documents\Visual Studio 2010\Projects\gcsecomputingtask\textfiles\Introduction\Software.txt"
Dim sr As New IO.StreamReader(strFile)
IntroductionLabel.Text = sr.ReadToEnd()
Else
If Student_Menu.TopicSelect.Text = "Representation of Data" Then
Dim strFile As String = "C:\Users\Sales\Documents\Visual Studio 2010\Projects\gcsecomputingtask\textfiles\Introduction\RepresentationOfData.txt"
Dim sr As New IO.StreamReader(strFile)
IntroductionLabel.Text = sr.ReadToEnd()
Else
If Student_Menu.TopicSelect.Text = "Databases" Then
Dim strFile As String = "C:\Users\Sales\Documents\Visual Studio 2010\Projects\gcsecomputingtask\textfiles\Introduction\Databases.txt"
Dim sr As New IO.StreamReader(strFile)
IntroductionLabel.Text = sr.ReadToEnd()
Else
If Student_Menu.TopicSelect.Text = "Communications & Networks" Then
Dim strFile As String = "C:\Users\Sales\Documents\Visual Studio 2010\Projects\gcsecomputingtask\textfiles\Introduction\Hardware.txt"
Dim sr As New IO.StreamReader(strFile)
IntroductionLabel.Text = sr.ReadToEnd()
End If
End If
End If
End If
End If
End If
IntroductionLabel.Font = font
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click
Me.Hide()
Student_Menu.Show()
Student_Menu.TopicSelect.ResetText()
Student_Menu.OptionBox.ResetText()
End Sub
我需要做些什么才能更新此信息,以便程序不会再次跳过表单。
答案 0 :(得分:0)
那里有很多重复的代码。这是一种减少它的方法(参见DRY)并公开一种方法来改变主题。在模块中:
Public Enum Topics
ComputerSystems
Hardware
Software
Data
Database
Networks
End Enum
然后在显示文字的表格中:
Friend Sub DisplayTopic(topic As Topics)
Dim text As String
Dim filname As String = ""
Select Case topic
Case Topics.ComputerSystems
filname = "ComputerSystems.txt"
Case Topics.Database
filname = "Databases.txt"
'... etc
End Select
' attach path
filname = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
"gcsecomputingtask", filname)
text = File.ReadAllText(filname)
IntroductionLabel.Text = text
End Sub
顺便说一下,VB确实有一个ElseIf
,它可以避免你在代码中看到的"arrow" anti pattern。至少,过度的缩进是令人讨厌的。
If topic = Topics.ComputerSystems Then
'...
ElseIf topic = Topics.Software Then
'...
End If
通常使用表单类的实例显示该表单:
Public Class MenuForm ' a form is just a class
' declare an object variable to use
Private info As Form2 ' whatever its name is (Explanation???)
....
Private Sub MenuForm_Load(...)
' create an instance to be used later:
info = New Form2
然后调用该方法告诉它要显示哪个主题。显示主题信息是一种与首先加载表单不同的方法,因为表单加载事件只发生一次。一种专门的方法来做我们想要的更有意义,因为它们实际上彼此无关,并且更容易看到代码如何工作:
info.DisplayTopic(Topics.ComputerSystems)
info.Show
这样,你没有一个表格摆弄另一个表格的控件,但仍然有一个明确的方式来传达要显示的主题。
请注意,主题文件的位置略有不同。您需要MyDocuments
中的“gcsecomputingtask”文件夹来存储文件。 VS项目文件夹不适合它,文件夹位置可能会根据您运行的计算机(您的计算机或计算机实验室等)而改变。它们也可以存储为资源以跳过该部分。