首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么彻底关闭子窗体

2013-10-12 
如何彻底关闭子窗体?因为我在子窗体里的FormClosing事件调用了主窗体的控件,然而发现,在关闭主窗体的时候,

如何彻底关闭子窗体?
因为我在子窗体里的FormClosing事件调用了主窗体的控件,然而发现,在关闭主窗体的时候,仍然会运行这个子窗体的Closing事件,请问怎么解决?
子窗体中:

        public delegate void MDIButton(string BT);
        public MDIButton ShowButton;
        public MDIButton AddButton;
        private void Login_FormClosing(object sender, FormClosingEventArgs e)
        {
            string BT = "";
            if (Program.Tools != null){ AddButton(BT); }
            else { ShowButton(BT); }
        }
父窗体中:
        private void MDILogin_Click(object sender, EventArgs e)
        {
            Login f2 = new Login();
            f2.ShowButton += new Login.MDIButton(ShowButton_Method);
            f2.AddButton += new Login.MDIButton(AddButton_Method);
            f2.Owner = this;
            MLogin.Visible = false;
            f2.ShowDialog();
        }

        public void ShowButton_Method(string sButton)
        {
            MLogin.Visible = true;
        }

        public void AddButton_Method(string aButton)
        {
            this.MTools.Nodes.Clear();
            this.MTools.ImageList = this.MTicon;
            TreeNode nodeParent;
            for (int i = 0; i < Program.Tools.Count; i = i + 3)
            {
                nodeParent = this.MTools.Nodes.Add("", Program.Tools[i].ToString(), "TWait", "TSelect");
            }
        }

[解决办法]
既然使用 ShowDialog(),还设置 Owner 属性干啥啊?
[解决办法]
具体原理 我个人的理解是 如果你要关闭 主程序的话 他必须是 先关闭 子程序 之后再关闭主程序的,这个是我们生活中常见的。
你可以调试 一下 看看 是不是 想我说的这样 ,之后再想办法解决
[解决办法]
如果只是想解决这个问题,最简单的办法是在closing事件里面加一句
this.FormClosing-= new FormClosingEventHandler(Login_FormClosing);
下次关闭时不再有关闭方法,自然不会再触发

你关闭主窗体时再次执行了这个窗体的关闭事件可能是因为内存中尚未将Login释放,你可以将“Login f2 = new Login();”这句换成“            using (Login f2 = new Login())“,再把后面的代码用大括号括起来。并且把”f2.Owner = this;“这句话删掉。

热点排行