WinForm之MDI窗体开发详解

打印 上一主题 下一主题

主题 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事件,并添加如下业务逻辑代码:
  1. private void menuWin_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  2. {
  3.         Form form = null;
  4.         var item = e.ClickedItem.Text;
  5.         if(item == "窗口1")
  6.         {
  7.                 form = new FirstForm();
  8.         }
  9.         if (item == "窗口2")
  10.         {
  11.                 form = new SecondForm();
  12.         }
  13.         if (item == "窗口3")
  14.         {
  15.                 form = new ThirdForm();         
  16.         }
  17.         if (form != null)
  18.         {
  19.                 form.Text = item;
  20.                 form.Width = 300;
  21.                 form.Height = 300;
  22.                 form.MdiParent = this;
  23.                 form.Show();
  24.         }
  25. }
复制代码
在上述代码中,重要根据差别的菜单项,打开差别的窗体,并设置窗体的大小,标题,MdiParent属性,然后调用Show方法进行展示。
设置MenuStrip的MdiWindowListItem属性,表现MDI容器中已经加载的窗体列表。在窗体初始化或Load事件中添加如下代码:
  1. ToolStripMenuItem window=new ToolStripMenuItem("Window");
  2. this.menuWin.MdiWindowListItem=window;
  3. 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 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表