【问题标题】:vb.net close winforms application from title bar X buttonvb.net 从标题栏 X 按钮关闭 winforms 应用程序
【发布时间】: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 的代码。我想知道您是使用默认实例还是创建自己的实例。这变得过于复杂了。
  • 在场景二中它没有关闭的原因是因为你隐藏了第二种形式(使其不可见但仍然打开)。因此,当您关闭第一个表单时,应用程序仍然在运行,因为第二个表单仍然打开(它根本不可见)并且没有关闭。因此,“当最后一个表单关闭时”按预期工作,因为您仍然打开了一个不可见的表单......

标签: vb.net winforms titlebar


【解决方案1】:

您需要关闭表单才能结束应用程序。我在一个可能有十几个表单的项目中使用“当最后一个表单关闭时”,它工作正常。

Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click
    frmOne.txtBoxOne.Text = "Back from 2"

    'Me.Hide() 'frmTwo is still running, To close a form use .Close()
    Close()
    frmOne.Show()
End Sub

【讨论】:

  • 来自 JavaFX 我觉得不能用标题栏 X 按钮关闭应用程序是没有意义的,为什么它会在那里谢谢你关于 VB.Net 和 SQLite 的所有答案太好了现在我可以尝试找出要下载的 NuGet SQLite 以及如何将其包含在自包含的 EXE 中
【解决方案2】:

您将 vb 项目设置为“当最后一个表单关闭时”退出 - 从启动表单打开第二个表单意味着当您关闭启动表单时,还有另一个表单打开,因此应用程序不会退出。将设置更改为“当启动表单关闭时”使应用按预期运行

【讨论】:

  • 是的,我更改了最后一次关闭的时间以解决另一个问题,即我的模块有变量要尝试记录 frmOne 加载了多少次,因此需要关闭,因此 Me.Close 关闭了导航到 frmTwo 后的应用程序我需要一个启动表单,它是一个启动屏幕并使用 Module 变量进行测试,感谢您的回答
猜你喜欢
  • 2019-04-15
  • 2016-04-21
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
相关资源
最近更新 更多