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();
效果圖如下:

