WinForm之MDI窗体开发详解

news/2025/1/7 23:03:45/文章来源:https://www.cnblogs.com/hsiang/p/18656598

在WinForm开发中,如果有多个页面进行展示,通常采用菜单栏+容器布局方式(点击菜单栏,打开新的页面,并在容器中显示)。今天以一个简单的小例子,简述如何通过菜单栏和MDI容器实现页面的布局,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点

在本实例开发中,主要涉及的知识点如下所示:

  • MenuStrip(菜单栏),为Windows Form程序提供一种菜单形式展示的控件,此控件派生自ToolStrip(工具栏),常用属性有以下几个:
    1. Items,表示菜单栏所属的菜单项列表,子项类型为ToolStripMenuItem。
    2. ItemClicked事件,表示菜单项点击事件,通过此事件可以处理菜单点击后的业务。且此事件参数为ToolStripItemClickedEventArgs类型,此类型包含ClickedItem属性,表示点击的菜单项。
    3. MdiWindowListItem,表示是MDI窗口打开时,显示的已经打开的子窗口列表,默认为空,需要手动添加。
  • MDI窗口,正常创建出来的窗体都是单一窗口(Single-Document-Interface),而MDI窗口,又称多文档界面窗体 (Multiple-Document-Interface ),用于同时显示多个文档,MDI 子窗体的创建避免了用户打开很多窗口的时候任务栏中挤满了窗体。MDI窗口常用的属性有以下几个:
    1. IsMdiContainer,用于设置主窗体,是否为MDI容器,只有设置为true,才能做为MDI容器,否则就是单一窗体。
    2. MdiParent,设置子窗体所属的MDI容器页面,设置完成后,此窗体就做为MDI窗体的一部分。
    3. MdiChildren,表示此MDI容器已经包含的子窗体列表。

注意,菜单子项也可以嵌套,即子菜单还可以包含子项。MDI子窗口也可以作为容器再包含子窗口,不过一般不建议。

开发步骤

首先设置要作为容器的窗体的IsMdiContainer属性为true,可以通过属性栏进行设置,如下图所示:

添加菜单栏,通过工具箱拖动MenuStrip控件到MDI主窗体,菜单栏的Dock属性默认为Top,可以根据实际需要进行修改。

为菜单栏添加菜单,可以通过点击MenuStrip右侧的[小三角],在弹出的MenuStrip任务菜单,然后点击[编辑项...],打开项集合编辑器,如下所示:

本示例添加三个菜单,分别用于打开三个窗口。

为MenuStrip添加ItemClicked事件,并添加如下业务逻辑代码:

private void menuWin_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{Form form = null;var item = e.ClickedItem.Text;if(item == "窗口1"){form = new FirstForm();}if (item == "窗口2"){form = new SecondForm();}if (item == "窗口3"){form = new ThirdForm();          }if (form != null){form.Text = item;form.Width = 300;form.Height = 300;form.MdiParent = this;form.Show();}
}

在上述代码中,主要根据不同的菜单项,打开不同的窗体,并设置窗体的大小,标题,MdiParent属性,然后调用Show方法进行展示。

设置MenuStrip的MdiWindowListItem属性,显示MDI容器中已经加载的窗体列表。在窗体初始化或Load事件中添加如下代码:

ToolStripMenuItem window=new ToolStripMenuItem("Window");
this.menuWin.MdiWindowListItem=window;
this.menuWin.Items.Add(window);

MdiWindowListItem初始化成功后,在添加MDI子窗体时,会自动添加到MdiWindowListItem的子项中。

运行调试

经过上述步骤基于MenuStrip+MDI开发的布局已经基本完成,运行程序后,点击菜单栏,打开窗口,默认如下所示:

窗口最大化,可以通过Window中的子项进行切换窗口,如下所示:

窗体最小化,默认情况下,最小化时停靠在容器底部(可以通过属性【MdiChildrenMinimizedAnchorBottom】进行修改),同时也可通过点击还原恢复正常窗口大小,如下所示:

MDI窗体布局

Windows Form的MDI窗体提供了4种布局方式,分别为:

  • Cascade,所有的MDI子窗体,叠加的显示在容器中,用户可以进行拖动调整位置,此为默认布局。
  • TileHorizontal,所有的MDI子窗体,以水平平铺的方式显示在容器中。
  • TileVertical,所有的MDI子窗体,以垂直平铺的方式显示在容器中。
  • ArrangeIcons,所有的MDI子窗体,以排列图标的方式显示在容器中。

具体示例如下所示:

Cascade层叠布局,如下所示:

TileHorizontal水平平铺,如下所示:

TileVertical垂直平铺方式,如下所示:

以上就是《WinForm之MDI窗体开发详解》的全部内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/865583.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinForm开发之MDI窗体开发详解

在WinForm开发中,如果有多个页面进行展示,通常采用菜单栏+容器布局方式(点击菜单栏,打开新的页面,并在容器中显示)。今天以一个简单的小例子,简述如何通过菜单栏和MDI容器实现页面的布局,仅供学习分享使用,如有不足之处,还请指正。在WinForm开发中,如果有多个页面进…

【 lvgl专题】LVGL核心部件——弧(arc)控件的介绍

概述 本文介绍LVGL核心部件——弧(arc),它由背景和前景弧组成。前景(指示器)可以进行触摸调整。LVGL核心部件——弧(arc)控件 一、部件和样式 LV_PART_MAIN 使用典型的背景样式属性绘制背景,使用圆弧样式属性绘制圆弧。 圆弧的大小和位置将遵循 padding 样式属性。LV_P…

10.18软件设计——工厂方法模式之加密算法

软件设计——工厂方法模式之加密算法 1、类图2、源代码2.1 结构目录2.2 所需jar包这里分享几个下载 jar 包的网址:http://www.mvnrepository.com/http://mvnrepository.com/http://findjar.comhttp://sourceforge.net/注:将 jar 包放入 lib 文件夹后要进行构建路径2.3 Met…

2024.12.14

SQL 语法 SQL(Structured Query Language)是一种用于管理和操作关系数据库的标准语言,包括数据查询、数据插入、数据更新、数据删除、数据库结构创建和修改等功能。。数据库表 一个数据库通常包含一个或多个表,每个表有一个名字标识(例如:"Websites"),表包含带…

在 GoRoute 中使用 NavigationBar

前言 在App 中通常会把主要的几个页面放在下方icon,让使用者能够方便操作,这个元件在flutter 中称为BottomNavigationBar。 而GoRouter则是Flutter 官方所提供的套件,可以用来整合整个专案的路由。 当这两个功能整合在一起的时候,一个不小心呈现出来的效果就会差很多。 准备…

MyWebServer提示501 Server error .php 映射支持模块加载失败!请检查相关模块文件是否存在,版本是否匹配!

前言全局说明MyWebServer提示.php 映射支持模块加载失败!请检查相关模块文件是否存在,版本是否匹配!一、说明 1.1 环境:二、问题 提示:501 Server error .php 映射支持模块加载失败!请检查相关模块文件是否存在,版本是否匹配!三、解决方法 3.1 缺少 fastcgi_mod.dll 文件3.2…

Easy.Admin:基于 .NET 8 和 Vue3 的后台管理系统,支持多种数据库和服务端渲染(SSR)

🌟 介绍 Easy.Admin 是一个高效且灵活的后台管理系统,采用了现代化的技术栈,旨在帮助开发者快速搭建高质量的后台管理平台。这个系统不仅支持 .NET 8 后端开发,还结合了 Vue3 和 TypeScript 前端技术,提供了一个功能强大且易于扩展的管理框架。同时,它还支持多种数据库,…

2024.10,14

HTML 颜色名目前所有浏览器都支持以下颜色名。 141个颜色名称是在HTML和CSS颜色规范定义的(17标准颜色,再加124)。下表列出了所有颜色的值,包括十六进制值。提示: 17标准颜色:黑色,蓝色,水,紫红色,灰色,绿色,石灰,栗色,海军,橄榄,橙,紫,红,白,银,蓝绿色,黄…

RASP从0到1

一、环境配置 在讲晦涩难懂的理论之前,先配个代码环境: https://xz.aliyun.com/t/4902?time__1311=n4%2Bxni0QKmTbG8DBDBqDqpDUO2QooDkbIbReDhttps://xz.aliyun.com/t/4903?time__1311=n4%2Bxni0QKmTbG8DyDBqDqpYHQTRZnpoD按照文1进行环境搭建,文1中文件名应为MANIFEST.MF…

springcloud版本选择

首先到官网:https://spring.io/projects/spring-cloud#overview 本文来自博客园,作者:余生请多指教ANT,转载请注明原文链接:https://www.cnblogs.com/wangbiaohistory/p/18658446

【网络安全法】某公众号作者擅自发布安全漏洞被处罚

今天,各大安全圈交流群疯狂转发某公众号作者擅自发布安全漏洞,被攻击者利用攻击某企业的消息。随着网安行业下行,大量网安从业者开始步入自媒体行业,有部分从业者为了博取眼球,增加流量,通过发布一些安全漏洞及poc来寻求更多人阅读和关注,显然作为网络安全从业者,没有仔…

Ultra-Low Precision 4-bit Training of Deep Neural Networks

目录概主要内容Radix-4 FP4 formatGradScaleTwo-Phase Rounding (TPR)Sun X., Wang N., Chen C., Ni J., Agrawal A., Cui X., Venkataramani S. and Maghraoui K. E. and Srinivasan V. Ultra-low precision 4-bit training of deep neural networks. NeurIPS, 2020.概 本文提…