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

如何多次打开WinForm窗体?关闭后无法重开及修复代码放置疑问

问题解决:关闭窗体后无法再次打开的异常处理

问题原因

当你关闭settings_window窗体时,.NET框架会自动销毁该窗体对象并释放其资源(调用Dispose()方法),此时主窗体中持有的secondForm引用已经指向一个被销毁的对象,再次调用Show()就会抛出System.ObjectDisposedException异常。

修复代码的放置位置

你找到的FormClosing事件处理代码,需要放在**settings_window窗体的代码文件(.cs)中**,具体操作步骤如下:

  1. 打开settings_window的代码文件:
    • 可以通过设计视图右键窗体→“查看代码”,或者直接在项目中找到对应的.cs文件打开。
  2. 绑定FormClosing事件:
    • 方法一(可视化操作):在设计视图选中窗体,打开属性窗口(按F4),切换到“事件”标签,找到FormClosing事件并双击,自动生成事件处理方法。
    • 方法二(手动绑定):在窗体的构造函数中添加事件绑定代码:
      public settings_window()
      {
          InitializeComponent();
          // 绑定FormClosing事件到处理方法
          this.FormClosing += settings_window_FormClosing;
      }
      
  3. 粘贴处理代码:
    在自动生成或手动创建的settings_window_FormClosing方法中,写入以下代码:
    private void settings_window_FormClosing(object sender, FormClosingEventArgs e)
    {
        this.Hide();
        e.Cancel = true;    // 取消窗体关闭操作,仅隐藏窗体
    }
    

补充说明

这样修改后,点击settings_window的关闭按钮时,窗体只会被隐藏而非销毁,主窗体中持有的secondForm引用仍然有效,后续可以多次调用Show()重新显示窗体。如果需要在程序退出时彻底释放资源,可以在主窗体的FormClosing事件中添加secondForm.Dispose()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:25:47