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 方法以确保可靠性。
500

被折叠的 条评论
为什么被折叠?



