winform的formclosed和formclosing事件区别

WinForm 的 FormClosed 和 FormClosing 事件区别

触发时机不同
FormClosing 事件在窗体即将关闭时触发,此时窗体尚未完全关闭,仍可取消关闭操作。
FormClosed 事件在窗体完全关闭后触发,此时窗体已释放资源,无法取消操作。

可操作性差异
FormClosing 事件可通过 e.Cancel = true 取消关闭,例如提示用户保存未提交的数据。
FormClosed 事件仅用于清理资源或后续逻辑(如记录日志),无法干预关闭过程。

执行顺序
FormClosing 事件先于 FormClosed 事件执行。若在 FormClosing 中取消关闭,FormClosed 不会触发。

典型应用场景

FormClosing 事件
阻止意外关闭:检查用户输入是否有效,若无效则取消关闭。
示例代码:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
    if (MessageBox.Show("确认关闭?", "提示", MessageBoxButtons.YesNo) == DialogResult.No) {
        e.Cancel = true; // 取消关闭
    }
}

FormClosed 事件
释放非托管资源(如文件句柄、数据库连接)。
更新应用程序状态(如主窗体关闭时退出程序)。
示例代码:

private void Form1_FormClosed(object sender, FormClosedEventArgs e) {
    Application.Exit(); // 关闭所有窗体
}

注意事项

避免在 FormClosed 中操作窗体控件,此时控件可能已释放。
资源清理建议同时重写 Dispose 方法以确保可靠性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值