论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
WinForm之MDI窗体开发详解
WinForm之MDI窗体开发详解
去皮卡多
金牌会员
|
2025-1-8 02:45:23
|
显示全部楼层
|
阅读模式
楼主
主题
908
|
帖子
908
|
积分
2724
在WinForm开发中,假如有多个页面进行展示,通常采取菜单栏+容器结构方式(点击菜单栏,打开新的页面,并在容器中表现)。本日以一个简单的小例子,简述怎样通过菜单栏和MDI容器实现页面的结构,仅供学习分享利用,如有不足之处,还请指正。
涉及知识点
在本实例开发中,重要涉及的知识点如下所示:
MenuStrip(菜单栏),为Windows Form程序提供一种菜单形式展示的控件,此控件派生自ToolStrip(工具栏),常用属性有以下几个:
Items,表现菜单栏所属的菜单项列表,子项类型为ToolStripMenuItem。
ItemClicked事件,表现菜单项点击事件,通过此事件可以处理菜单点击后的业务。且此事件参数为ToolStripItemClickedEventArgs类型,此类型包含ClickedItem属性,表现点击的菜单项。
MdiWindowListItem,表现是MDI窗口打开时,表现的已经打开的子窗口列表,默认为空,需要手动添加。
MDI窗口,正常创建出来的窗体都是单一窗口(Single-Document-Interface),而MDI窗口,又称多文档界面窗体 (Multiple-Document-Interface ),用于同时表现多个文档,MDI 子窗体的创建避免了用户打开许多窗口的时间使命栏中挤满了窗体。MDI窗口常用的属性有以下几个:
IsMdiContainer,用于设置主窗体,是否为MDI容器,只有设置为true,才能做为MDI容器,否则就是单一窗体。
MdiParent,设置子窗体所属的MDI容器页面,设置完成后,此窗体就做为MDI窗体的一部门。
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窗体开发详解》的全部内容。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
去皮卡多
金牌会员
这个人很懒什么都没写!
楼主热帖
民间最大社区,倒闭了!
如何基于 ZEGO SDK 实现 iOS 变声/混响 ...
FPGA虚拟化:突破次元壁的技术 ...
Ribbon负载均衡的深度分析和使用 ...
驱动开发:内核R3与R0内存映射拷贝 ...
LyScript 实现应用层钩子扫描器 ...
基于Kubernetes(k8s)部署Dubbo+Nacos服 ...
Python生成字母对后写入文件
仿京东严选商城项目,集购物+支付+发货 ...
Java 结构化数据处理开源库 SPL ...
标签云
挺好的
服务器
浏览过的版块
Java
快速回复
返回顶部
返回列表