在winform的MDI窗体中,打开一个新的子窗体的同时如何关闭前一个子窗体?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在winform的MDI窗体中,打开一个新的子窗体的同时如何关闭前一个子窗体?相关的知识,希望对你有一定的参考价值。

加急,如有源代码更好,谢谢各位大侠了。

参考技术A 每次打开的时候检查子窗体列表是否有新的子窗体,有 就先关闭再打开,每次打开的时候都把当前的窗口加到子窗体列表,追问

有示例源代码吗?具体讲下呗

参考技术B 这个很简单,用一个公共类,获取前一个子窗体的引用,当打开新窗体时,使用这个引用关闭窗体!追问

可以具体说明,这个类的内容,以及如何引用吗?最好是结合有代码的。

追答

比如
(公共类)
class C
public static Form1 form;

class Form1

.......
C.form=this;(比如在构造函数里加)
........

class mainform
//主窗体
在打开新窗体之前,判断C.form是否为空,不是则关闭!


这是最简单的一种,如果想要关闭之前多个子窗体,可以使用一个list把打开的子窗体全添加进去,待新子窗体打开前,遍历list关闭所有子窗体!

本回答被提问者采纳
参考技术C C#是吧?
设父窗体为AForm,子窗体为BForm
1,
子窗体中添加字段
private
AForm
af;
2,
子窗体中添加构造函数
public
BForm(AForm
a)

InitializeComponents();
this.af
=
a;

3,
子父窗体要打开子窗体的地方写
BForm
b
=
new
BForm(this);
b.ShowDialog();
4,
子窗体的
Form_Closed事件中写
this.af.Close();
完事.

winform 之MDI容器

MDI是指将多控件窗体在同一窗体中打开

1、设置:属性中IsMDIContainer:true;

窗体变为灰色成为MDI窗体容器

2、MDI中一般采用菜单作为打开方式

3、子级窗体在MDI中打开,需先设置位于MDI窗体中

例:

Form2 f2 = new Form2();
f2.MdiParent = this;
f2.Show();

4、窗口打开最大化

对象.WindowState=FormwindowState.Maximized

5、父级Panel容器中打开,为隐藏窗口还原按钮

对象.Parent=Panel;

6、无边框

FormBorderStyle:None;

7、窗口打开唯一

List<Form> formlist = new List<Form>();
        private void 销售额ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //窗口唯一
            bool has = false;
            Form2 f2 = new Form2();
            foreach(Form f in formlist)
            {
                if (f is Form2)
                {
                    has = true;
                    f2 = f as Form2;
                }
            }
            if (has)
            {
                foreach (Form f in formlist)
                {
                    f.Hide();
                }
                f2.Show();
            }
            else
            {
                //定义到MDI容器
                f2.MdiParent = this;
                //打开最大化
                f2.WindowState = FormWindowState.Maximized;
                //Panel父级
                f2.Parent = panel1;
                //展示打开
                f2.Show();
                formlist.Add(f2);
            }
        }

 

以上是关于在winform的MDI窗体中,打开一个新的子窗体的同时如何关闭前一个子窗体?的主要内容,如果未能解决你的问题,请参考以下文章

WinForm排列MDI子窗体

winform 之MDI容器

C#-WinForm-MDI窗体容器权限设置

winform(MDI窗体容器权限设置)

winform(MDI窗体容器权限设置)

c#winform多线程