You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过按钮关闭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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:06:03