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
相关产品推荐
相关产品推荐

