跳转至

窗体生命周期事件#

来源D:\study\C#1\WinForm\0804-作业\0804-作业

窗体从创建到销毁会触发一系列事件,理解生命周期可以把握「初始化放哪里、清理放哪里」。


1. 生命周期顺序#

new Form()            构造函数(只执行一次)
Load                 窗体加载完成,首次显示前
Shown                窗体显示后
……(运行中:Paint / Resize / 各种交互事件)
FormClosing          关闭前(可以取消)
FormClosed           关闭后(无法取消)
Dispose              资源释放

2. 各事件详解#

Load — 窗体加载时#

// 首次显示前触发,最常用的初始化位置
private void Form1_Load(object sender, EventArgs e)
{
    // 初始化数据、加载列表、读取配置文件
    toolStripStatusLabel3.Text = "日期:" + DateTime.Now.ToString();
}

FormClosing — 关闭前(可阻止关闭)#

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    // e.Cancel = true;   // 取消关闭
    DialogResult res = MessageBox.Show("是否关闭?", "提示",
        MessageBoxButtons.OKCancel);
    if (res == DialogResult.Cancel)
        e.Cancel = true;      // 用户点取消 → 阻止关闭
}

FormClosed — 关闭后(无法阻止)#

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    // 清理资源、保存数据(窗口已经关闭)
}

3. 实战:关闭确认(计算器项目源码)#

private void Fr_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult dialogResult =
    MessageBox.Show("是否关闭", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
    if (dialogResult == DialogResult.Cancel)
    {
        e.Cancel = true;   // 点取消则不关闭
    }
}

4. 注意事项#

事件 能否阻止 常见用途
Load 初始化数据
Shown 显示后的动画、首次聚焦
FormClosing 能(e.Cancel 关闭确认、保存提示
FormClosed 不能 资源清理
Dispose 不能 释放非托管资源

💡 要点: - FormClosing 可以阻止关闭(e.Cancel = true),FormClosed 在关闭后触发,无法阻止。 - 构造函数里访问控件要在 InitializeComponent() 之后,而「读文件、加载列表」这类操作建议放 Load 事件(此时窗体已完全初始化)。


相关笔记#