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

点击退出按钮后FormClosing事件触发两次的问题求助

解决退出按钮触发二次确认对话框的问题

这个问题我之前也碰到过,核心原因就是Application.Exit()会触发所有打开窗体的FormClosing事件——哪怕你以为已经删掉了FormClosing事件里的代码,只要事件绑定还存在(比如设计器自动生成的绑定没移除),就会导致二次弹窗。下面给你几个可行的解决办法:

方法1:彻底移除FormClosing事件绑定

先检查你的窗体设计器文件(比如YourForm.Designer.cs),看看有没有类似下面的代码:

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.YourForm_FormClosing);

如果有,直接删除这行代码,同时把对应的事件处理方法(比如YourForm_FormClosing)也删掉,这样Application.Exit()就不会触发额外的确认逻辑了。

方法2:用标记变量区分退出触发源

如果你需要保留FormClosing事件的其他逻辑(比如用户点击窗体右上角叉号时的确认),可以添加一个标记变量来区分是通过退出按钮触发的退出,还是其他方式:

  1. 在窗体类里定义一个私有布尔变量:
    private bool _isInitiatedExit = false;
    
  2. 修改退出按钮的点击事件代码:
    private void btnExit_Click(object sender, EventArgs e)
    {
        DialogResult dialogResult = MessageBox.Show("Are you sure you want to exit?", "Exit Program?", MessageBoxButtons.YesNo);
        if (dialogResult == DialogResult.Yes)
        {
            _isInitiatedExit = true;
            Application.Exit();
        }
    }
    
  3. 在FormClosing事件处理程序里添加判断:
    private void YourForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (!_isInitiatedExit)
        {
            // 这里只处理非按钮触发的退出(比如点击叉号)
            DialogResult result = MessageBox.Show("Are you sure you want to exit?", "Exit", MessageBoxButtons.YesNo);
            if (result == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }
    

这样当通过退出按钮触发退出时,标记设为true,FormClosing里就不会再弹出确认框了。

方法3:改用窗体关闭代替Application.Exit()

你也可以不用Application.Exit(),直接关闭主窗体,这样应用程序会自动退出(只要Program.cs里是Application.Run(new YourMainForm())):
修改退出按钮的代码:

private void btnExit_Click(object sender, EventArgs e)
{
    DialogResult dialogResult = MessageBox.Show("Are you sure you want to exit?", "Exit Program?", MessageBoxButtons.YesNo);
    if (dialogResult == DialogResult.Yes)
    {
        this.Close();
    }
}

如果需要保留FormClosing的确认逻辑,同样可以结合上面的标记变量来区分触发源,避免二次弹窗。

内容的提问来源于stack exchange,提问作者Jonathan Tapnio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:30:15