C#中创建MDI应用程序             
创建MDI应用程序
本节通过一个实例介绍创建MDI应用程序的具体过程及设置窗体的布局。实例运行结果如图1所示。

图1  MDI应用程序运行结果
程序开发步骤如下。
(1)新建一个Windows应用程序,命名为07_02,默认窗体为Form1.cs。
(2)将窗体Form1的IsMdiContainer属性设置为True,作为MDI父窗体,然后再添加两个Windows窗体,作为MDI子窗体。
(3)在Form1窗体中,添加一个MenuStrip控件,作为该父窗体的菜单项。
(4)程序主要代码如下。
MDI父窗体Form1中,声明MDI子窗体Form2和Form3的两个实例对象,并给它们赋值为null,用来判断子窗体是第一次打开,还是已经加载过而被释放掉了。声明MDI子窗体Form2和Form3对象的代码如下:
                         Form2 frmChild1 = null;
            Form3 frmChild2 = null;            单击“打开子窗体1”菜单项时,程序首先判断“子窗体1”是否打开,如果没有,则实例化一个新的对象,并以当前窗体为父窗体进行显示,否则,判断“子窗体1”的对象是否释放。如果释放,则重新实例化一个对象;如果没有释放,则获得“子窗体1”对象的焦点。“打开子窗体1”菜单项的Click事件代码如下:
                         private void 打开子窗体1ToolStripMenuItem_Click(object sender, EventArgs e)
            {
            if (frmChild1 == null)
            {
            frmChild1 = new Form2();
            frmChild1.MdiParent = this;
            frmChild1.Show();
            }
            else
            {
            if (frmChild1.IsDisposed)
            {
            frmChild1 = new Form2();
            }
            frmChild1.MdiParent = this;
            frmChild1.Show();
            frmChild1.Focus();
            }
            }            说明:“打开子窗体2”菜单项的Click事件与“打开子窗体1”菜单项的Click事件代码实现原理类似,其详细代码请参见本书附带光盘。
单击“水平排列”菜单项时,如果父窗体中有多个子窗体,程序会将这些窗体按照一定的顺序水平排列在父窗体中。“水平排列”菜单项的Click事件代码如下:
                         private void 水平排列ToolStripMenuItem_Click(object sender, EventArgs e)
            {
            LayoutMdi(MdiLayout.TileHorizontal);
            }            说明:“垂直排列”菜单项的Click事件与“水平排列”菜单项的Click事件代码实现原理类似,其详细代码请参见本书附带光盘。
完整程序代码如下:
★   ★★★★Form1.cs窗体代码文件完整程序代码★★★★★
                         using System;
            using System.Collections.Generic;
            using System.ComponentModel;
            using System.Data;
            using System.Drawing;
            using System.Text;
            using System.Windows.Forms;
            namespace _7_02
            {
            public partial class Form1 : Form
            {
            Form2 frmChild1 = null;
            Form3 frmChild2 = null;
            public Form1()
            {
            InitializeComponent();
            }
            private void 打开子窗体1ToolStripMenuItem_Click(object sender, EventArgs e)
            {
            if (frmChild1 == null)
            {
            frmChild1 = new Form2();
            frmChild1.MdiParent = this;
            frmChild1.Show();
            }
            else
            {
            if (frmChild1.IsDisposed)
            {
            frmChild1 = new Form2();
            }
            frmChild1.MdiParent = this;
            frmChild1.Show();
            frmChild1.Focus();
            }
            }
            private void 打开子窗体2ToolStripMenuItem_Click(object sender, EventArgs e)
            {
            if (frmChild2 == null)
            {
            frmChild2 = new Form3();
            frmChild2.MdiParent = this;
            frmChild2.Show();
            }
            else
            {
            if (frmChild2.IsDisposed)
            {
            frmChild2 = new Form3();
            }
            frmChild2.MdiParent = this;
            frmChild2.Show();
            frmChild2.Focus();
            }
            }
            private void 水平排列ToolStripMenuItem_Click(object sender, EventArgs e)
            {
            LayoutMdi(MdiLayout.TileHorizontal);
            }
            private void 垂直排列ToolStripMenuItem_Click(object sender, EventArgs e)
            {
            LayoutMdi(MdiLayout.TileVertical);
            }
            private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
            {
            Application.Exit();
            }
            }
            }            ★   ★★★★Form1.designer.cs窗体设计文件完整程序代码★★★★★