C#关闭子窗口而不释放子窗口对象的问题解决
2017-03-02 22:34
225 查看
在网上找来一些方式,感觉还都不错,下面给出方式:
在线扫描相机的调试过程中,需要开辟调试界面来进行位置的配置。调试结束后,一种常用的方式是将调试参数保存并在下次启动时加载。另一种简单方式是直接使用该参数运行程序。因此,在后一种情况下,需要实现的功能是:即使关闭调试窗口,其窗口对象也不释放。除非其主窗口关闭,才销毁其调试窗口的对象。
子窗口类中添加的关闭函数如下:
出处:http://blog.csdn.net/u013698770/article/details/53521180
===================================================================================
另外还有一种方式:
子窗体定义一个委托,父窗体实例化子窗体时注册子窗体的委托事件(具体功能是实现父窗口的控件变化),子窗体关闭时调用事件方法。
出处:https://zhidao.baidu.com/question/134623114688436765.html
========================================================================
根据上面的说明,我们自己实现自己的功能,我的功能其实很简单,就一行代码,释放资源,
但需要注意,在 fui.FormClosed += delegate(object obj, FormClosedEventArgs arg) { fui = null; };中使用的参数,不要和按钮事件中参数名相同,注意参数冲突。
在线扫描相机的调试过程中,需要开辟调试界面来进行位置的配置。调试结束后,一种常用的方式是将调试参数保存并在下次启动时加载。另一种简单方式是直接使用该参数运行程序。因此,在后一种情况下,需要实现的功能是:即使关闭调试窗口,其窗口对象也不释放。除非其主窗口关闭,才销毁其调试窗口的对象。
1 在主窗口中实例化子窗口
在主窗口中实例化子窗口,而不是在按钮中实例化子窗口对象。Form2 f2 = new Form2();
2 通过按钮来显示主窗口
在按钮中需要实现的是窗口的显示private void Config_Click(object sender, EventArgs e) { f2.Show(); }
3 关闭子窗口而不释放子窗口对象的方法
经查询和实证,修改子窗口中Dispose的方法是可行的。更改如下:
protected override void Dispose(bool disposing) { Hide(); //if (disposing && (components != null)) //{ // components.Dispose(); //} //base.Dispose(disposing); }
4 在父窗口关闭时销毁子窗口对象
由于需要在父窗口关闭是销毁子窗口对象,因此,在父窗口的关闭动作FormClosed中添加调用子窗口f2的销毁函数。private void Form1_FormClosed(object sender, FormClosedEventArgs e) { f2.Close(); }
子窗口类中添加的关闭函数如下:
public void Close() { this.Dispose(); }
出处:http://blog.csdn.net/u013698770/article/details/53521180
===================================================================================
另外还有一种方式:
子窗体定义一个委托,父窗体实例化子窗体时注册子窗体的委托事件(具体功能是实现父窗口的控件变化),子窗体关闭时调用事件方法。
父窗体 public void ShowPopWindow() { TestA sub = new TestA(); sub.CloseWindow += new Action(sub_CloseWindow); sub.show(); } void sub_CloseWindow() { //改变父窗体控件内容 } 子窗体 public class TestA { public event Action CloseWindow; protected virtual void OnCloseWindow() { Action handler = CloseWindow; if (handler != null) handler(); } //子窗体关闭事件 private void CloseSubWindow() { OnCloseWindow(); } }
出处:https://zhidao.baidu.com/question/134623114688436765.html
========================================================================
根据上面的说明,我们自己实现自己的功能,我的功能其实很简单,就一行代码,释放资源,
Form2 fui = null; private void button1_Click(object sender, EventArgs e) { if (fui == null) fui = new userUserInfo(); fui.MdiParent = this; fui.FormClosed += delegate(object obj, FormClosedEventArgs arg) { fui = null; }; fui.Show(); fui.Activate(); }
但需要注意,在 fui.FormClosed += delegate(object obj, FormClosedEventArgs arg) { fui = null; };中使用的参数,不要和按钮事件中参数名相同,注意参数冲突。
相关文章推荐
- 在线人数统计,解决了关闭浏览器窗口,释放session的问题
- 使用定时器解决对象事件中自释放的问题
- 解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
- 解决 正在尝试使用已关闭或释放并且不再有效的 SPWeb 对象
- 解决session关闭时再调用对象方法时报session已关闭问题
- 解决: ctrl+shift 快速切换输入法导致自动关闭当前打开的任何窗口的问题
- 自动资源释放-使用对象管理资源,解决资源泄露问题
- [解决办法]正在尝试使用已关闭或释放并且不再有效的 SPWeb 对象
- 解决session关闭时再调用对象方法时报session已关闭问题
- 解决无法关闭IE中alert()或者confirm弹出窗口的问题
- 在IE7/IE8 关闭窗口,上传图片无法预览,window.status无效问题解决办法
- 在父窗口关闭子窗口(解决刷新问题)
- 解决JavaScript页面刷新 与 弹出窗口问题 无提示关闭窗口
- Windows 7安装MSN问题,关闭后主窗口停留在任务栏中解决方法
- IE6中“窗口正忙,关闭该窗口将导致一些问题,是否关闭该窗口”问题的解决
- QT中使用槽函数来关闭窗口,导致内存泄露的问题以及解决办法
- 在IE7关闭窗口,上传图片无法预览,window.status无效问题解决办法
- 在IE7关闭窗口,上传图片无法预览,window.status无效问题解决办法
- [转]在IE7关闭窗口,上传图片无法预览,window.status无效问题解决办法
- C#COM对象的资源释放问题解决