WinForm——MDI窗體

語言: CN / TW / HK

MDI窗體由一個父窗體和若干個子窗體組成。MDI窗體允許同時顯示多個窗體,他常包括含有子選單的“視窗”選單項,該選單項用於在視窗之間進行切換。

MDI 窗體的設定並不複雜,只需要將窗體的屬性 IsMdiContainer 設定為 True 即可。

該屬性既可以在 Windows 窗體的屬性視窗中設定,也可以通過程式碼設定,這裡在窗體載入事件 Load 中設定窗體為 MDI 窗體,程式碼如下。

this.IsMdiContainer = True;

此外,還可以在窗體類的構造方法中加入上面的程式碼。\ 在設定 MDI 窗體以後,窗體的執行效果如下圖所示。

子窗體在父窗體中排列的方式可以使用帶有Mdilayout列舉LayoutMdi列舉成員

| 列舉 | 說明 | | -------------- | ------------------------------ | | ArrangeIcons | 所有 MDI 子圖示均排列在 MDI 父窗體的工作區內。 | | Cascade | 所有 MDI 子視窗均層疊在 MDI 父窗體的工作區內。 | | TileHorizontal | 所有 MDI 子視窗均水平平鋪在 MDI 父窗體的工作區內。 | | TileVertical | 所有 MDI 子視窗均垂直平鋪在 MDI 父窗體的工作區內。 |

Cascade排列:

TileHorizontal排列:

TileVertical排列:

程式碼:

public partial class Form1 : Form

{

private static int FormCount = 1;

//定義此常量是為了統計MDI窗體數目,

MainMenu mnuMain = new MainMenu();

MenuItem FileMenu;

MenuItem NewMenu;

MenuItem ExitMenu;

MenuItem WindowMenu;

public Form1()

{

InitializeComponent();

this.IsMdiContainer = true;

this.Text = "MDI演示程式";

FileMenu = new MenuItem();

FileMenu.Text = "檔案";

WindowMenu = new MenuItem();

WindowMenu.Text = "視窗(\&W)";

WindowMenu.MenuItems.Add("窗體層疊(\&C)", new EventHandler(Cascade_Click));

WindowMenu.MenuItems.Add("水平平鋪(\&H)", new EventHandler(TileH_Click));

WindowMenu.MenuItems.Add("垂直平鋪(\&V)", new EventHandler(TileV_Click));

WindowMenu.MdiList = true;

//這一句比較重要,有了這一句就可以實現在新建一個MDI窗體後會在此主選單項下顯示存在的MDI窗體選單項

NewMenu = new MenuItem();

NewMenu.Text = "新建窗體(\&N)";

NewMenu.Click += new EventHandler(New_Click);

ExitMenu = new MenuItem();

FileMenu.MenuItems.Add(NewMenu);

FileMenu.MenuItems.Add(new MenuItem("-"));

FileMenu.MenuItems.Add(ExitMenu);

mnuMain.MenuItems.Add(FileMenu);

mnuMain.MenuItems.Add(WindowMenu);

this.Menu = mnuMain;

}

private void Cascade_Click(object sender, EventArgs e)

//實現對主窗體中的MDI窗體的層疊操作

{

this.LayoutMdi(MdiLayout.Cascade);

}

private void TileH_Click(object sender, EventArgs e)

//實現對主窗體中的MDI窗體的水平平鋪操作

{

this.LayoutMdi(MdiLayout.TileHorizontal);

}

private void TileV_Click(object sender, EventArgs e)

//實現對主窗體中的MDI窗體的垂直平鋪操作

{

this.LayoutMdi(MdiLayout.TileVertical);

}

private void New_Click(object sender, EventArgs e)

{

Form frmTemp = new Form();

//新建一個窗體

frmTemp.MdiParent = this;

//定義此窗體的父窗體,從而此窗體成為一個MDI窗體

frmTemp.Text = "窗體0" + FormCount.ToString();

//設定MDI窗體的標題

FormCount++;

frmTemp.Show();

//把此MDI窗體顯示出來

}

private void Form1_Load(object sender, EventArgs e)

{

int deskWidth = Screen.PrimaryScreen.WorkingArea.Width;

int deskHeight = Screen.PrimaryScreen.WorkingArea.Height;

this.Width = Convert.ToInt32(deskWidth * 0.8);

this.Height = Convert.ToInt32(deskHeight * 0.8);

}  

private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)

{

Form frmTemp = new Form();

//新建一個窗體

frmTemp.MdiParent = this;

//定義此窗體的父窗體,從而此窗體成為一個MDI窗體

frmTemp.Text = "窗體0" + FormCount.ToString();

//設定MDI窗體的標題

FormCount++;

frmTemp.Show();

//把此MDI窗體顯示出來

}

}