如何多次打开WinForm窗体?关闭后无法重开及修复代码放置疑问
问题解决:关闭窗体后无法再次打开的异常处理
问题原因
当你关闭settings_window窗体时,.NET框架会自动销毁该窗体对象并释放其资源(调用Dispose()方法),此时主窗体中持有的secondForm引用已经指向一个被销毁的对象,再次调用Show()就会抛出System.ObjectDisposedException异常。
修复代码的放置位置
你找到的FormClosing事件处理代码,需要放在**settings_window窗体的代码文件(.cs)中**,具体操作步骤如下:
- 打开
settings_window的代码文件:- 可以通过设计视图右键窗体→“查看代码”,或者直接在项目中找到对应的
.cs文件打开。
- 可以通过设计视图右键窗体→“查看代码”,或者直接在项目中找到对应的
- 绑定
FormClosing事件:- 方法一(可视化操作):在设计视图选中窗体,打开属性窗口(按
F4),切换到“事件”标签,找到FormClosing事件并双击,自动生成事件处理方法。 - 方法二(手动绑定):在窗体的构造函数中添加事件绑定代码:
public settings_window() { InitializeComponent(); // 绑定FormClosing事件到处理方法 this.FormClosing += settings_window_FormClosing; }
- 方法一(可视化操作):在设计视图选中窗体,打开属性窗口(按
- 粘贴处理代码:
在自动生成或手动创建的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
相关产品推荐
相关产品推荐

