vb.net - 在 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 不会显示,我不明白为什么或如何修复它。预先感谢您的帮助!
解决方案
简单地说,将上一个菜单/表单传递给参数化构造函数中的新菜单,并将其保存在类变量中,然后处理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
推荐阅读
- python - 如何在python的列表中增加一个值?
- python - 无论如何要使用现有的浏览器会话来运行 selenium 会话
- react-native - 我怎样才能用 react-native-chart-kit 做这个
- javascript - Uncaught TypeError: Object(...) is not a function at connect
- php - 如何在 laravel 集体中获得属性?
- flutter - 运行命令 Flutter run 时出现 Flutter 错误
- google-chrome - Google 表格中的事件变量不会获取我从另一个单元格复制和粘贴值的单元格的值
- r - 创建一个输出一系列 2 x 2 表的函数
- c# - 如何使用 int 数组作为字典键 C#
- nestjs - 什么是 typeorm 中的 Exactly One to many