在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关闭所有子窗体!
设父窗体为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窗体中,打开一个新的子窗体的同时如何关闭前一个子窗体?的主要内容,如果未能解决你的问题,请参考以下文章