【发布时间】:2020-06-05 20:05:25
【问题描述】:
在 winforms 应用程序上使用 VB.Net 我有两个表单
两个表单都设置为“当最后一个表单关闭时”
两种形式的“关键预览”都设置为 TRUE
frmOne 启动窗体的“窗体边框样式”设置为 FixedToolWindow
以下是使用两种形式执行的事件序列
加载 frmOne 并单击标题栏窗体上的 X 按钮关闭,并在 IDE 中显示开始按钮
这是所需的行为
第二个事件序列加载应用程序 frmOne 有一个按钮可以导航到 frmTwo 和 frmTwo 有一个按钮可以导航回 frmOne 当我们回到 frmOne 时,我们单击标题栏上的 X 按钮,frmOne 关闭但应用程序仍在运行 NO Start IDE 中的按钮
问题是如何在导航到其他表单后关闭应用程序?
下面的代码是我尝试解决此问题的各种方法
我包含未显示所需结果的 KeyPress 代码
Private Sub frmOne_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
'frmOne Property KeyPreview needs to be set to True
If Asc(e.KeyChar) = 27 Then
'MessageBox.Show("You Pressed " & e.KeyChar)
Me.Close()
End If
End Sub
'Public Sub frmOne_QueryClose(Cancel As Integer, CloseMode As Integer)
'Prevent user from closing with the Close box in the title bar.
'If CloseMode = 1 Then Me.Close()
'If CloseMode = 1 Then Application.Exit()
'End Sub
'Private Sub frmOne_FormClosing(sender As Object, e As FormClosingEventArgs) 'Handles Me.FormClosing
'Application.Exit()
'Me.Close()
'End Sub
Private Sub frmOne_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
'Application.Exit()
End Sub
frmTwo 的代码
Private Sub btnToFormTwo_Click(sender As Object, e As EventArgs) Handles btnToFormTwo.Click
Dim i As Integer
i = txtBoxOne.Text.Length
If i = 0 Then
MsgBox("Enter Data")
txtBoxOne.Select()
Return
End If
Dim OBJ As New frmTwo
OBJ.SPass = txtBoxOne.Text
OBJ.Show()
lblFormOne.Text = " "
txtBoxOne.Clear()
Me.Hide()
'Me.Close()'R Click project PassVar Set Start Up Form
'Best Solution is to have Splash Form as Start Up Form
End Sub
代码返回 frmOne
Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click
frmOne.txtBoxOne.Text = "Back from 2"
Me.Hide()
frmOne.Show()
End Sub
【问题讨论】:
-
When last Form Closes是一个项目设置。您可以在When startup Form closes中更改它。不确定IDE中的开始按钮是什么。您是指 ►(开始)按钮吗?意思是,您可以看到它,因为应用程序已终止? -
@Jimi YES ►(开始)按钮我通过删除 Me.Close 并添加 Application.Exit() 修复了 KeyPress 这是一个初学者的错误 duh 但是 X 按钮仍然不起作用我会测试更改回当启动表单关闭并回复您谢谢
-
@Jimi 更改解决了我在导航到 frmTwo 代码时遇到的问题。另一个初学者错误现在的新问题是,当我只使用我时,模块中的变量没有被使用。隐藏,但这是另一个问题更多工作
-
显示您正在显示 Form2 的代码以及您从 Form2 返回到 Form1 的代码。我想知道您是使用默认实例还是创建自己的实例。这变得过于复杂了。
-
在场景二中它没有关闭的原因是因为你隐藏了第二种形式(使其不可见但仍然打开)。因此,当您关闭第一个表单时,应用程序仍然在运行,因为第二个表单仍然打开(它根本不可见)并且没有关闭。因此,“当最后一个表单关闭时”按预期工作,因为您仍然打开了一个不可见的表单......