WinForm——MDI窗体

简介: WinForm——MDI窗体

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


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


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


this.IsMdiContainer = True;


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

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

tt.png

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


枚举


说明


ArrangeIcons


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


Cascade


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


TileHorizontal


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


TileVertical


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



Cascade排列:

tt.png

TileHorizontal排列:

tt.png

TileVertical排列:

tt.png

代码:


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


       }


   }




目录
相关文章
|
API C# Windows
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
Winform中实现无边框窗体只需要设置FormBorderStyle = FormBorderStyle.None,但是无边框下我们需要保留移动窗体、拖拽调整大小、自定义美观好看的标题栏等...
5271 0
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
|
C# 图形学 Windows
Winform控件优化之背景透明那些事2:窗体背景透明、镂空穿透、SetStyle、GDI透明效果等
两行代码就能实现Form窗体的(背景)透明效果,它不是Opacity属性的整个窗体透明,`TransparencyKey`实现窗体的透明、窗体中间部分镂空效果...
4435 0
Winform控件优化之背景透明那些事2:窗体背景透明、镂空穿透、SetStyle、GDI透明效果等
|
Java C++ Python
快讯:LeetCode中国正式上线《剑指Offer》题目,刷题真方便了!
近日,LeetCode中国[1]上线了一个全新的分类模块 LCOF “剑指 Offer[2]”。
8071 0
快讯:LeetCode中国正式上线《剑指Offer》题目,刷题真方便了!
|
消息中间件 测试技术 Kafka
使用ClickHouse集群的7个基本技巧
使用ClickHouse集群的7个基本技巧
382 1
|
前端开发 JavaScript
前端:实现一个 sleep 函数
在前端开发中,实现一个 `sleep` 函数可以用来暂停代码执行,模拟延迟效果,常用于测试或控制异步操作的节奏。该函数通常基于 `Promise` 和 `setTimeout` 实现,简单易用。
|
JavaScript
Vue项目启动报错处理
Vue项目启动报错处理
487 1
|
机器学习/深度学习 搜索推荐 Python
L2范数(L2 norm)
L2范数(L2 norm),也称为欧几里德范数(Euclidean norm)或2-范数,是向量元素的平方和的平方根。它在数学和机器学习中经常被用作一种正则化项、距离度量或误差度量。
10989 76
|
监控 NoSQL Java
Spring Boot集成Redis启动失败【Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.G】
Spring Boot集成Redis启动失败【Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.G】
Winform控件优化之继承Control重写实现Layer遮罩层
通过继承Control控件类,进行重写,实现Layer效果的遮罩层,具体使用可直接看后面的介绍。主要功能如下:1. 遮罩层的透明度Alpha,默认125。255表示不透明。2. 设置遮罩层中心的图片
897 0
Winform控件优化之继承Control重写实现Layer遮罩层
|
存储 运维 监控
跟误告警说再见,Smart Metrics 帮你用算法配告警
本文从两类常见的无效告警规则入手,分析有效告警配置难,误告警泛滥的原因,介绍 Smart Metrics 是如何帮助用户解决告警难配的问题的,并介绍一些最佳实践。
跟误告警说再见,Smart Metrics 帮你用算法配告警

热门文章

最新文章