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

C# WinForm关闭二级窗体时如何恢复已最小化的主窗体

WinForm关闭二级窗体恢复主窗体状态实现方案

方案1:传递主窗体引用实现(逻辑直观)

步骤1:修改二级窗体FrmSecondaryForm代码

新增公共属性存储主窗体引用,修改FormClosing事件逻辑:

// FrmSecondaryForm类内新增属性,与其他方法平级
public Form MainForm { get; set; }

private void FrmSecondaryForm_FormClosing(object sender, FormClosingEventArgs e)
{
    // 校验非空后恢复主窗体状态
    if (MainForm != null && MainForm.WindowState == FormWindowState.Minimized)
    {
        MainForm.WindowState = FormWindowState.Normal;
    }
}

步骤2:修改主窗体按钮点击事件

创建二级窗体时传入当前主窗体实例:

private void BtnSecondaryForm_Click(object sender, EventArgs e)
{
    // Open the secondary form.
    FrmSecondaryForm fsf = new FrmSecondaryForm ();
    // 给二级窗体赋值主窗体引用
    fsf.MainForm = this;
    fsf.Show();
    this.WindowState = FormWindowState.Minimized;
}

方案2:主窗体订阅二级窗体关闭事件(耦合度更低,无需修改二级窗体结构)

所有逻辑全部在主窗体实现,二级窗体的FormClosing事件不需要编写任何代码:

private void BtnSecondaryForm_Click(object sender, EventArgs e)
{
    // Open the secondary form.
    FrmSecondaryForm fsf = new FrmSecondaryForm ();
    // 订阅二级窗体的关闭事件,触发时直接恢复当前主窗体状态
    fsf.FormClosing += (s, args) => 
    {
        this.WindowState = FormWindowState.Normal;
    };
    fsf.Show();
    this.WindowState = FormWindowState.Minimized;
}

方案选择建议

  • 如果二级窗体仅为当前主窗体服务,选方案1逻辑更清晰
  • 如果二级窗体会被多个窗体复用,选方案2不需要额外维护引用关系,适配性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:06:04