首页 > 解决方案 > 在 vb.net 中切换表单

问题描述

我是国家公园管理局的一名志愿者,试图将 20 年前最初用一种名为 ToolBook 的语言创建的交互式显示转换为 Visual Basic。该计划由一个解决方案下的多个项目组成。名为“MainMenu”的启动项目可以被认为是一个图书馆,带有可以调出“书籍”的按钮。名为 Geology 的项目是一个示例“书”,GeologyMenu 可以被认为是一本书的索引。GeologyMenu 上的按钮连接到解释和展示公园地质过程示例的“章节”。“章节”在“地质”项目中,并且在项目中运行良好。程序中使用的所有表单都有计时器,允许程序在不使用时将自身重新设置为 MainMenu。在之前的帖子中,在Idle Mind(再次感谢您),只要没有在 GeologyMenu 上按下任何按钮,以下代码就可以很好地从 MainMenu 转到 GeologyMenu 和相反的方向。但是,如果我转到“章节”,我将无法再从 GeologyMenu 回到 MainMenu。以下是相关代码:

MainMenu
Public Class frmMainMenu 
Private Sub BtnGeology_Click(sender As Object, e As EventArgs) Handles btnGeology.Click
        Dim formNew As New Geology.frmGeologyMenu
        AddHandler formNew.FormClosed, AddressOf formNew_FormClosed
        TimerMain.Stop()
        formNew.Show()
        Me.Hide()
End Sub

Private Sub formNew_FormClosed(Sender As Object, e As FormClosedEventArgs)
        lblTime.Text = 8
        TimerMain.Start()
        Me.Show()
End Sub
GeologyMenu
Public Class frmGeologyMenu
Public Sub frmGeologyMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        lblTime.Text = 6
        TimerGeologyMenu.Enabled = True
        Me.Show()
End Sub
Private Sub BtnErosion_Click(sender As Object, e As EventArgs) Handles btnErosion.Click
        TimerGeologyMenu.Stop()
        frmErosionP01.Show()
        Me.Hide()
End Sub
The code below for takes the viewer to the Erosion “chapter”
Private Sub BtnErosion_Click(sender As Object, e As EventArgs) Handles btnErosion.Click
        TimerGeologyMenu.Stop()
        frmErosionP01.Show()
        Me.Hide()
End Sub
Erosion “Chapter” .  This is the code for the button on every form in Erosion that takes the program back to GeologyMenu
Public Class frmErosionP02
Private Sub BtnGeologyMenu_Click(sender As Object, e As EventArgs) Handles btnGeologyMenu.Click
        My.Computer.Audio.Stop()
        frmGeologyMenu.lblTime.Text = 10
        frmGeologyMenu.TimerGeologyMenu.Enabled = True
        frmGeologyMenu.Show()
        Me.Close()
End Sub

Erosion 中的表单代码将我带回 GeologyMenu,但是当我关闭 GeologyMenu 时 MainMenu 不会显示,我不明白为什么或如何修复它。预先感谢您的帮助!

标签: vb.net

解决方案


简单地说,将上一个菜单/表单传递给参数化构造函数中的新菜单,并将其保存在类变量中,然后处理Form.Closed新菜单的事件以显示前一个菜单。

相关代码示例:

Public Class frmMainMenu
    Inherits Form

    Private Sub BtnGeology_Click(sender As Object, e As EventArgs) Handles btnGeology.Click
        Dim formNew As New frmGeologyMenu(Me)

        Me.Hide()
        formNew.Show()
    End Sub

End Class

Public Class frmGeologyMenu
    Inherits Form

    Private PreviousMenu As Form

    Private Sub New()
        InitializeComponent()
        '...
    End Sub

    Sub New(prevMenu As Form)
        Me.New()

        PreviousMenu = prevMenu

        AddHandler FormClosed,
            Sub(s, e)
                PreviousMenu.Show()
            End Sub
    End Sub

    Private Sub BtnErosion_Click(sender As Object, e As EventArgs) Handles btnErosion.Click
        Dim frmErosion As New frmErosionP02(Me)

        Me.Hide()
        frmErosion.Show()
    End Sub

End Class

Public Class frmErosionP02
    Inherits Form

    Private PreviousMenu As Form

    Private Sub New()
        InitializeComponent()
        '...
    End Sub

    Public Sub New(prevMenu As Form)
        Me.New()

        PreviousMenu = prevMenu

        AddHandler FormClosed,
            Sub(s, e)
                PreviousMenu.Show()
            End Sub
    End Sub

End Class

SOQ66574557


推荐阅读