根据另一个表单中的选择更新一个表单

时间:2016-01-03 21:38:08

标签: vb.net windows forms combobox

如果标题有点模糊,我很抱歉,我一天只在这里。

所以我的问题是我有一个菜单表单,我从组合框中输入选项。然后我转到下一个显示相关导入文本文件信息的表单。 但是,当我单击“返回”按钮返回菜单并在组合框中输入不同的信息时,它不会将我带到正确的文本文件信息,它只显示上一个选择的信息。

here is the student menu pic

here is the text file form

下面是学生菜单下一个按钮的代码:

    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

我需要做些什么才能更新此信息,以便程序不会再次跳过表单。

1 个答案:

答案 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项目文件夹不适合它,文件夹位置可能会根据您运行的计算机(您的计算机或计算机实验室等)而改变。它们也可以存储为资源以跳过该部分。