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

WinForms中如何检测子窗体Form2关闭并重新调用Form1的Initialize方法

解决Form2关闭后重新初始化Form1的问题

这需求挺常见的,我给你两种简单实用的实现方式,你可以根据窗口交互的需求来选:

方法一:用模态窗口(ShowDialog)直接处理

如果Form2是需要用户处理完才能回到Form1的场景,用ShowDialog()最省心——它会阻塞代码执行,直到Form2关闭,之后直接调用Initialize()就行:

修改Form1的按钮点击事件代码:

private void button1_Click(object sender, EventArgs e) {
    // 用using自动释放Form2资源,避免内存泄漏
    using (var form2 = new Form2()) {
        // 打开模态窗口,Form2关闭后才会继续执行下面的代码
        form2.ShowDialog();
        // Form2已关闭,重新执行初始化逻辑
        Initialize();
    }
}

这种方式代码简洁直观,不需要额外处理事件,适合大多数需要用户完成Form2操作再返回的场景。

方法二:非模态窗口(Show)+ 订阅FormClosed事件

要是你需要Form1和Form2能同时交互,那就用Show(),这时候得订阅Form2的FormClosed事件,在窗口关闭时触发初始化:

修改Form1的按钮点击事件代码:

private void button1_Click(object sender, EventArgs e) {
    var form2 = new Form2();
    // 订阅FormClosed事件,Form2关闭时执行lambda里的逻辑
    form2.FormClosed += (senderForm, eArgs) => {
        // 重新初始化Form1
        Initialize();
        // 手动释放Form2资源,避免多次打开后内存占用过高
        form2.Dispose();
    };
    // 打开非模态窗口,代码立即返回,不阻塞Form1操作
    form2.Show();
}

这里用lambda表达式快速创建事件处理程序,当Form2关闭时自动触发初始化。记得手动释放Form2的资源,不然反复打开关闭会造成内存浪费。

两种方法的小区别

  • 模态窗口(ShowDialog):Form2打开后,Form1暂时无法操作,适合需要用户完成流程再返回的场景。
  • 非模态窗口(Show):两个窗口可以并行操作,适合需要同时交互的场景,但要额外处理事件和资源释放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:07:35