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

出处:http://www.cnblogs.com/mq0036/p/6492960.html

最新文章

  1. 网络-->监控-->单位换算
  2. Javascript/jQuery 获取地址栏URL参数的方法
  3. Linux_cheat命令安装和使用
  4. AndroidStudio里面怎么取消与SVN的关联
  5. 查看ADOP会话
  6. SNF开发平台WinForm之七-单据打印和使用说明-SNF快速开发平台3.3-Spring.Net.Framework
  7. OC基础(16)
  8. VirtualBox中开启Linux的SSH(CentOS)
  9. java集合框架复习(一)
  10. Discuz论坛架构改造
  11. ASP.NET vNext 在 Mac OS
  12. Oracle 数据备份、恢复以及导入时表空间不存在的解决方案
  13. JS判断访问设备是移动设备还是pc
  14. Emacs配置(考场必备)(Emacs)
  15. Nodejs----学习路线
  16. python记录_day17 类与类之间的关系
  17. Mac安装Python3报错Permission denied @ dir_s_mkdir - /usr/local/Frameworks
  18. Redis实战(三)CentOS 7上Redis主从复制
  19. IE下判断IE版本的语句...[if lte IE 6]……[endif](用户判断IE版本的如果小于6就显示)
  20. 读取xml文件,写入excel

热门文章

  1. el表达式与<c:foreach>标签的联合各种使用方法记录
  2. 转Centos7.0进入单用户模式修改root密码
  3. 架构(三)MongoDB安装配置以及集群搭建
  4. [转]异常声音检测之kaldi DNN 训练
  5. Tomcat 的 server.xml 文件详解
  6. SpringMVC框架二:SpringMVC与MyBatis整合
  7. ubuntu16.04 uninstall cuda 9.0 completely and install 8.0 instead
  8. 模板发送java邮件
  9. 【Android基础】利用Intent在Activity之间传递数据
  10. Linux文件系统及文件属性