如何通过按钮关闭Form并打开另一个Form?程序闪退问题求助
解决WinForms中关闭窗体导致整个应用退出的问题
兄弟,我太懂这种刚写第一个UI程序就踩坑的憋屈感了!你猜得没错,问题确实出在this.Close()上——你的设置窗体应该是程序的启动主窗体,当你调用this.Close()时,.NET的WinForms框架会默认认为整个应用要终止,直接结束消息循环,进程就退出了,后面的log.Show()根本没机会正常执行。
下面给你几个靠谱的解决方案,按需选择:
方案1:调整启动窗体(最推荐)
如果Login窗体才是程序的初始入口,直接去项目属性里把启动对象改成Login。这样程序启动时先打开Login,之后打开设置窗体,关闭设置窗体时只会关闭当前窗体,不会影响整个应用的运行。
方案2:隐藏当前窗体而非关闭
把this.Close()换成this.Hide(),这样设置窗体只是被隐藏,不会触发应用退出,之后再显示Login窗体:
Login log = new Login(); this.Hide(); // 替换原来的this.Close() log.Show();
如果希望Login窗体关闭后再彻底退出应用,可以用ShowDialog()(模态窗口),这样Login关闭后再关闭设置窗体:
Login log = new Login(); this.Hide(); log.ShowDialog(); // 等待Login关闭后再执行下面的代码 this.Close(); // 此时关闭设置窗体,整个应用就会退出
方案3:自定义应用的退出逻辑
如果必须保留设置窗体作为启动窗体,可以在Program.cs里修改应用的启动逻辑,手动管理消息循环:
using System; using System.Windows.Forms; namespace YourAppName { static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var settingsForm = new SettingsForm(); settingsForm.Show(); // 手动启动消息循环,直到调用Application.Exit() Application.Run(); } } }
然后在Login窗体的关闭事件里调用Application.Exit()来终止整个应用,而设置窗体关闭时只需要隐藏自己即可。
内容的提问来源于stack exchange,提问作者Codepage Cynic
相关产品推荐
相关产品推荐

