博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#关闭子窗口而不释放子窗口对象的问题解决
阅读量:6432 次
发布时间:2019-06-23

本文共 2292 字,大约阅读时间需要 7 分钟。

在网上找来一些方式,感觉还都不错,下面给出方式:

在线扫描相机的调试过程中,需要开辟调试界面来进行位置的配置。调试结束后,一种常用的方式是将调试参数保存并在下次启动时加载。另一种简单方式是直接使用该参数运行程序。因此,在后一种情况下,需要实现的功能是:即使关闭调试窗口,其窗口对象也不释放。除非其主窗口关闭,才销毁其调试窗口的对象。

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; };中使用的参数,不要和按钮事件中参数名相同,注意参数冲突。

你可能感兴趣的文章
JAVA编程题-用java解决兔子问题
查看>>
pychon笔记
查看>>
[转] Web前端研发工程师编程能力飞升之路
查看>>
简单理解桶排序
查看>>
C#项目代码规范
查看>>
vscode常用插件
查看>>
算法的时间复杂度比较,计算多项式的直接法和秦九韶法
查看>>
SQL SERVER与C#的数据类型对应表
查看>>
Eclipse 教程
查看>>
Search in Rotated Sorted Array II
查看>>
数据库的使用
查看>>
查找数组中元素的索引位置
查看>>
BUAA-OO 第三单元作业 JML 总结与思考
查看>>
try、catch、finally、return的执行顺序
查看>>
云服务器启动tomcat巨慢,很慢
查看>>
Jmeter自带录制功能
查看>>
android studio 可以汉化的 文件 地方
查看>>
一句话提取WebView的Html
查看>>
九种排序算法分析与实现
查看>>
【简讯】PuTTY 0.61发布!
查看>>