1.设置父窗体
使用MDI窗体,需要先将父窗体的IsMdiContainer属性设置为True
2.生成用于MDI子窗体的窗体
1 frmTemp f1 = new frmTemp(); 2 f1.Text = "窗体1"; 3 f1.MdiParent = this; 4 f1.Show(); 5
6 frmTemp f2 = new frmTemp(); 7 f2.Text = "窗体2"; 8 f2.MdiParent = this; 9 f2.Show(); 10
11 frmTemp f3 = new frmTemp(); 12 f3.Text = "窗体3"; 13 f3.MdiParent = this; 14 f3.Show();
3.排列子窗体
层叠排列
1 LayoutMdi(MdiLayout.Cascade);
水平平铺
1 LayoutMdi(MdiLayout.TileHorizontal);
垂直排列
1 LayoutMdi(MdiLayout.TileVertical);
***********************************分割线**********************************
4.对于MDI,常用的是在父窗体中加载MDI子窗体,并且经常会在子窗体之间切换,实现的效果如下
1)创建两个不同的子窗体,并分别设置窗体的BackgroundImage,用于区分窗体
2)通过菜单栏的功能,选择对应的窗体
3)对于窗体,判断之前是否存在,进行不通的操作
代码如下:
1 private void 企鹅ToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 //窗体没有创建或者窗体被释放
4 if (f2 == null || f2.IsDisposed == true) 5 { 6 f2 = new frmTemp2(); 7 f2.FormBorderStyle = FormBorderStyle.None; 8 f2.MdiParent = this; //设置窗体的MDI父窗体
9 f2.Parent = this.panel1;//设置控件的父容器
10 f2.Dock = DockStyle.Fill; 11 f2.Show(); 12 if (f1 != null) 13 f1.SendToBack(); 14 } 15 else
16 { 17 f2.Activate();//使窗体获得焦点
18 f2.BringToFront(); 19 } 20 }
所有的示例程序链接如下:
http://download.csdn.net/detail/u010312811/9446887
更新1:(因为程序修改不大,没有动之前上传的代码)
如何解决界面之间切换的闪烁问题:
修改两个MDI子界面的构造函数,如下:
1 this.SetStyle( 2 ControlStyles.AllPaintingInWmPaint |
3 ControlStyles.OptimizedDoubleBuffer, true); 4 this.UpdateStyles();
效果图如下: