0
点赞
收藏
分享

微信扫一扫

WinForm——MDI窗体

萨摩斯加士奇 2022-03-21 阅读 59


MDI窗体由一个父窗体和若干个子窗体组成。MDI窗体允许同时显示多个窗体,他常包括含有子菜单的“窗口”菜单项,该菜单项用于在窗口之间进行切换。

MDI 窗体的设置并不复杂,只需要将窗体的属性 IsMdiContainer 设置为 True 即可。

该属性既可以在 Windows 窗体的属性窗口中设置,也可以通过代码设置,这里在窗体加载事件 Load 中设置窗体为 MDI 窗体,代码如下。

this.IsMdiContainer = True;

此外,还可以在窗体类的构造方法中加入上面的代码。

在设置 MDI 窗体以后,窗体的运行效果如下图所示。

WinForm——MDI窗体_ico

  子窗体在父窗体中排列的方式可以使用带有Mdilayout枚举LayoutMdi枚举成员


枚举



说明



ArrangeIcons



所有 MDI 子图标均排列在 MDI 父窗体的工作区内。



Cascade



所有 MDI 子窗口均层叠在 MDI 父窗体的工作区内。



TileHorizontal



所有 MDI 子窗口均水平平铺在 MDI 父窗体的工作区内。



TileVertical



所有 MDI 子窗口均垂直平铺在 MDI 父窗体的工作区内。



Cascade排列:

WinForm——MDI窗体_c#_02

TileHorizontal排列:

WinForm——MDI窗体_ico_03

TileVertical排列:

WinForm——MDI窗体_ico_04

代码:

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

        }

    }


举报

相关推荐

0 条评论