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窗体显示出来
}
}