Vb.net 根据从另一个表单中选择的内容更新一个表单

Vb.net 根据从另一个表单中选择的内容更新一个表单,vb.net,windows,forms,combobox,Vb.net,Windows,Forms,Combobox,如果标题有点模糊,我很抱歉,我只在这里呆了一天 所以我的问题是我有一个菜单表单,在其中我从组合框中输入选项。然后我转到下一个表单,其中显示了相关的导入文本文件信息。 但是,当我单击“上一步”按钮返回菜单并在组合框中输入不同的信息时,它不会将我带到正确的文本文件信息,它只显示上一选择中的信息 以下是学生菜单下一步按钮的代码: If OptionBox.Text = "Introduction" Then Introduction.Show() Else

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

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

以下是学生菜单下一步按钮的代码:

    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

我需要做些什么才能更新这些信息,这样程序就不会跳过再次检查表单。

那里有很多重复的代码。下面是一种减少主题的方法(请参阅),并公开一种方法来更改主题。在模块中:

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
,它可以避免您在代码中看到的错误。至少,过度的压痕是令人讨厌的

    If topic = Topics.ComputerSystems Then
        '...
    ElseIf topic = Topics.Software Then
        '...
    End If
通常使用form类的实例显示该窗体:

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 project文件夹不是放置它的好位置,文件夹位置可能会根据您运行的机器(您的或计算机实验室等)的不同而变化。它们也可以存储为资源,以跳过该部分。

那里有大量重复代码。下面是一种减少主题的方法(请参阅),并公开一种方法来更改主题。在模块中:

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
,它可以避免您在代码中看到的错误。至少,过度的压痕是令人讨厌的

    If topic = Topics.ComputerSystems Then
        '...
    ElseIf topic = Topics.Software Then
        '...
    End If
通常使用form类的实例显示该窗体:

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 project文件夹不是放置它的好位置,文件夹位置可能会根据您运行的机器(您的或计算机实验室等)的不同而变化。它们也可以存储为跳过该部分的资源。

由于用户可以通过多种方式退出表单,一旦执行
info.Show()
主/选择器表单可以重置选择本身。只要在
SelectedIndex=-1
ok时忽略对CBO的更改,现在我已经为主题创建了一个新模块,我已经将DisplayTopic子模块放在了显示文本的介绍表单中。我将私有信息作为新的介绍,并将info.display主题放入其中-但是我如何结束私有信息,它是否应该是私有子信息。我的代码中没有
私有子信息
。我使用实例展示了使用表单的正确方法。只需将
私人信息作为新表单?
(使用您的表单名称)放在菜单表单顶部即可。我猜你的班名是
解释
,但这是一个你应该创建一个实例来展示的班级(
信息
,在我的答案中)我扩展了答案的这一部分…他们不是在你的学校教你创建表单实例吗?我已经在我的学生菜单表单的公共课位下面添加了私人信息作为新的介绍。当我放入Public子DisplayTopic(ByVal topic As Topics)时,我将它放在介绍表单的Public类下,出现了一个错误,即“topic”不能通过类“introduction”将类型“Module1.Topics”暴露在项目之外。因为用户可以通过多种方式退出表单,一旦您执行
info.Show()
home/main/picker表单可以重置选择本身。只要在
SelectedIndex=-1
ok时忽略对CBO的更改,现在我已经为主题创建了一个新模块,我已经将DisplayTopic子模块放在了显示文本的介绍表单中。我将私有信息作为新的介绍,并将info.display主题放入其中-但是我如何结束私有信息,它是否应该是私有子信息。我的代码中没有
私有子信息
。我使用实例展示了使用表单的正确方法。只需将
私人信息作为新表单?
(使用您的表单名称)放在菜单表单顶部即可。我猜你的班名是
解释
,但这是一个你应该创建一个实例来展示的班级(
信息
,在我的答案中)我扩展了答案的这一部分…他们不是在你的学校教你创建表单实例吗?我已经在我的学生菜单表单的公共课位下面添加了私人信息作为新的介绍。当我放入Public子DisplayTopic(ByVal topic作为Topics)时,我将它放在介绍表单的Public类下,出现一个错误,即“topic”不能通过类“introduction”将类型“Module1.Topics”暴露在项目之外。