• C#中关闭子窗口而不释放子窗口对象的方法


    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

  • 相关阅读:
    OpenJudge百炼习题解答(C++)--题4010:2011
    Centos6.5卸载图形化
    nfs远程挂载问题记录
    走马观花-浪里跳-学习英文
    weblogic部署存在中文乱码导致部署失败
    KMS11激活Window系列
    mysql8.x开启远程登录
    notepad++插件实现json、xml格式化
    RHEL SHELL快捷键
    linux-env命令解析
  • 原文地址:https://www.cnblogs.com/qiantao/p/9546249.html
Copyright © 2020-2023  润新知