【发布时间】:2018-02-12 07:40:01
【问题描述】:
我想创建一个包含两个表单的应用程序,一个名为 Source 的主表单和一个名为 Viewer 的子表单。使用每个表单上的按钮,用户可以切换到另一个表单,即使该表单之前已关闭。所以我将程序设置为Close When Last Form Closes。此外,我在每个表单关闭时添加了消息框,只是为了检查用户是否确定。
但是现在我关闭两个表单后我的应用程序不会退出!它显示在任务管理器中,如果我在 MSVS 中运行它,调试器永远不会停止! 当每个窗体关闭时,My.Application.Forms 返回一个空集合。如果我使用End/Application.Exit 强制退出它,程序仍然会退出 - 请参阅下面的 MWE。 我该怎么办?
MWE
创建一个空白的 VB.NET Windows 窗体项目。在项目设置的“应用程序”选项卡中,选择“最后一个表单关闭时关闭”。在设计器中,一键创建表单Source。
Public Class Source
Public Sub Switch(sender As Object, e As EventArgs) Handles Button1.Click
My.Forms.Viewer.Show()
End Sub
Public Sub Free(sender As Object, e As FormClosingEventArgs) Handles Me.Closing
e.Cancel=(MsgBoxResult.Cancel=MsgBox("Are you sure?"))
End Sub
'Public Sub Test(sender As Object, e As EventArgs) Handles Me.Closed
'Debug.Assert(Not My.Application.Forms.Count))
'If the next line is uncommented, the application will close, like we want
'If Not My.Forms.Viewer.Visible Then Application.Exit()
'End Sub
End Class
然后创建一个名为 Viewer 的相同表单。
Public Class Viewer
Public Sub Switch(sender As Object, e As EventArgs) Handles Button1.Click
My.Forms.Source.Show()
End Sub
Public Sub Free(sender As Object, e As FormClosingEventArgs) Handles Me.Closing
e.Cancel=(MsgBoxResult.Cancel=MsgBox("Are you sure?"))
End Sub
'Public Sub Test(sender As Object, e As EventArgs) Handles Me.Closed
'Debug.Assert(Not My.Application.Forms.Count))
'If the next line is uncommented, the application will close, like we want
'If Not My.Forms.Source.Visible Then Application.Exit()
'End Sub
End Class
尝试最后关闭任何表单。两者都不会导致应用退出。
【问题讨论】:
标签: vb.net forms events shutdown formclosing