WinForm——MDI窗体

WinForm——MDI窗体MDI 窗体由一个父窗体和若干个子窗体组成 MDI 窗体允许同时显示多个窗体 他常包括含有子菜单的 窗口 菜单项 该菜单项用于在窗口之间进行切换 MDI 窗体的设置并不复杂 只需要将窗体的属性 IsMdiContain 设置为 True 即可 该属性既可以在 Windows 窗体的属性窗口中设置 也可以通过代码设置 这里在窗体加载事件 Load 中设置窗体为 MDI 窗体 代码如下 t

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

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

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

this.IsMdiContainer = True;

WinForm——MDI窗体

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

枚举

说明

ArrangeIcons

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

Cascade

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

TileHorizontal

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

TileVertical

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

 

Cascade排列:

WinForm——MDI窗体

TileHorizontal排列:

WinForm——MDI窗体

TileVertical排列:

WinForm——MDI窗体

代码:

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

        }

    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209652.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:44
下一篇 2026年3月19日 上午8:44


相关推荐

  • 腾讯之后,百度智能云多地开启免费线下安装“小龙虾”OpenClaw

    腾讯之后,百度智能云多地开启免费线下安装“小龙虾”OpenClaw

    2026年3月12日
    2
  • 在idea中实现热部署之Jrebel激活

    在idea中实现热部署之Jrebel激活首先 需要安装 jrebel 插件安装完后进行激活 ServiceAddre https jrebel qekang com GUID GUID 地址 https www guidgen comhttp www ofmonkey com transfer guidhttps www guidgenerato com online guid generator aspx 注意 邮箱随意 格式对就行以上就表示激活成功了注意 jrebel 激

    2026年3月17日
    2
  • 微服务治理(Nocas)

    微服务治理(Nocas)实现微服务治理 Nocas 1 服务治理介绍实现微服务之间的调用 我们可以通过 HTTP 客户端工具完成 但是我们需要把服务提供者的网络地址 IP 端口 等硬编码到代码中 这样会存在以下问题 一旦服务提供者地址变化 就需要手工修改代码一旦是多个服务提供者 无法实现负载均衡功能一旦服务变得越来越多 人工维护调用关系困难那么应该怎么解决呢 这时候就需要通过注册中心动态的实现服务治理 什么是服务治理服务治理是微服务架构中最核心最基本的模块 用于实现各个微服务的自动化注册与发现 服务注册

    2026年3月16日
    3
  • HOJ2275 Number sequence

    HOJ2275 Number sequence

    2022年1月17日
    56
  • plt.subplot()使用方法以及参数介绍

    plt.subplot()使用方法以及参数介绍plt.subplot()plt.subplot(nrows,ncols,index,**kwargs)第一个参数:*args(官网文档描述)Eithera3-digitintegerorthreeseparateintegersdescribingthepositionofthesubplot.Ifthethreeintegersarenr…

    2022年6月18日
    97
  • ReadProcessMemory函数的分析「建议收藏」

    ReadProcessMemory函数的分析「建议收藏」ReadProcessMemory函数用于读取其他进程的数据。我们知道自远古时代结束后,user模式下的进程都有自己的地址空间,进程与进程间互不干扰,这叫私有财产神圣不可侵犯。但windows里还真就提供了那么一个机制,让你可以合法的获取别人的私有财产,这就是ReadProcessMemory和WriteProcessMemory。为什么一个进程居然可以访问另一个进程的地址空间呢?因为独立的只是低

    2022年10月4日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号