C# 关闭子窗体释放子窗体对象问题

瘦欲@ 提交于 2020-01-24 23:45:42

1 在主窗口中实例化子窗口

Form2 f2 = new Form2();

2 通过按钮来显示子窗口

f2.Show();

3 关闭子窗口而不释放子窗口对象的方法

protected override void Dispose(bool disposing)
        {
            Hide();
            //if (disposing && (components != null))
            //{
            //    components.Dispose();
            //}
            //base.Dispose(disposing);
        }(注意:在子窗口Designer文件中修改)

4 在父窗口关闭时销毁子窗口对象

  子窗口类中添加的关闭函数如下:

public void Close()
        {

            this.Dispose();

        }父窗口关闭是销毁子窗口对象,因此,在父窗口的关闭动作FormClosed中添加调用子窗口f2的销毁函数。
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            f2.Close();
        }  

===================================================================================

另外还有一种方式:

子窗体定义一个委托,父窗体实例化子窗体时注册子窗体的委托事件(具体功能是实现父窗口的控件变化),子窗体关闭时调用事件方法。
  
父窗体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

========================================================================


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!