C#MDI窗体实现多窗口效果  
Visual C#是微软公司推出的下一代主流程序开发语言,他也是一种功能十分强大的程
序设计语言,正在受到越来越多的编程人员的喜欢。在Visual C#中,提供了为实现MDI程序设计的很多功能。本文就是通过一个具体的例子来详细的介绍在Visual C#中的MDI编程。   
  一程序设计及运行的环境:
  (1)视窗2000服务器版
  (2).Net FrameWork SDK Beta 2版
  二程序设计的思路、主要步骤和实现方法:
  MDI编程主要就是要在主窗体中能够新建一个MDI窗体,并且能够对主窗体中的所有MDI窗体实现层叠、水平平铺和垂直平铺。虽然这些操作比较基本,但却是程序设计中的要点和重点。本文就按照上述功能的顺序来一一介绍。
  (1)首先要设定主窗体是一个MDI窗体的容器,因为只有如此才能够在此主窗体上面添加MDI窗体,从而实现对MDI编程,具体实现语句如下:
  this.IsMdiContainer = true ;
  (2)在主窗体上面新建一个MDI窗体。在程序中,新建一个MDI窗体的命令是通过一个菜单的事件来实现的。在处理新建一个MDI窗体事件中,关键是要设定此MDI窗体的父窗体。其实MDI窗体和别的窗体没有什么不同,不同点就在MDI窗体有上一级窗体,即父窗体,而其他窗体是没有的,具体实现语句如下:

[C#] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
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窗体显示出来
  }

(3)实现对MDI窗体的层叠:
  对于在主窗体中实现对MDI窗体的层叠操作,在主程序中,是通过一个方法来实现的,这个方法就是LayoutMdi,他所带的参数是MdiLayout.Cascade,具体实现语句如下:

[C#] 纯文本查看 复制代码
?
01
02
03
04
05
private void Cascade_Click ( object sender , EventArgs e )
   //实现对主窗体中的MDI窗体的层叠操作
  {
   this .LayoutMdi ( MdiLayout.Cascade ) ;
  }

  实现操作后具体如下图:

3297479352167119773.jpg.gif (17.55 KB, 下载次数: 39)

下载附件

2012-11-23 10:11 上传

图01:在主窗体中实现对MDI窗体的层叠操作,点击小图放大
  (4)实现对MDI窗体的水平平铺:
  要在主窗体实现MDI窗体水平平铺,也是通过LayoutMdi方法,此时所带的参数是MdiLayout.TileHorizontal,具体实现语句如下:

[C#] 纯文本查看 复制代码
?
01
02
03
04
05
private void TileH_Click ( object sender , EventArgs e )
   //实现对主窗体中的MDI窗体的水平平铺操作
  {
   this .LayoutMdi ( MdiLayout.TileHorizontal ) ;
  }

实现操作后具体如下图:

3297479352167119774.jpg.gif (14.2 KB, 下载次数: 33)

下载附件

2012-11-23 10:11 上传

C实现MDI——多文档窗口 - adxlong - Python与Ubuntu
图02:在主窗体中实现对MDI窗体的水平平铺操作,点击小图放大
  (5)实现对MDI窗体的垂直平铺:
  要在主窗体实现MDI窗体垂直平铺,也是通过LayoutMdi方法,此时所带的参数是MdiLayout.TileVertical,具体实现语句如下:
 

[C#] 纯文本查看 复制代码
?
01
02
03
04
05
private void TileV_Click ( object sender , EventArgs e )
   //实现对主窗体中的MDI窗体的垂直平铺操作
  {
   this .LayoutMdi ( MdiLayout.TileVertical ) ;
  }

实现操作后具体如下图:

3297479352167119775.jpg.gif (11.66 KB, 下载次数: 55)

下载附件

2012-11-23 10:11 上传

C实现MDI——多文档窗口 - adxlong - Python与Ubuntu
图03:在主窗体中实现对MDI窗体的垂直平铺操作,点击小图放大
  (6)在有些MDI程序,当新建一个MDI窗体以后,往往会在某些菜单项的下面生产一个以此MDI窗体的名称为名称的子菜单项。在其他语言中要实现这种功能,可能就要在某些主菜单项下动态的加入子菜单了。但是在Visual C#中实现此种功能,就显得比较简单的,只有在要加入的主菜单项下加入下面一句程序就可以了:
  WindowMenu.MdiList = true ;本程序中,是在"窗口"主菜单项下面加入MDI窗体的子菜单项的。加入此语句后,程序运行界面具体如下图:
C实现MDI——多文档窗口 - adxlong - Python与Ubuntu
图04:在主窗体中实现在新建一个MDI窗体后会在此主菜单项下显示存在的MDI窗体菜单项
  点击小图放大

3297479352167119776.jpg.gif (14.06 KB, 下载次数: 28)

下载附件

2012-11-23 10:11 上传

  三.程序源代码(mdi.cs)及编译方法:
  通过对程序设计中的难点介绍以后,就可以比较容易得到实现对上述MDI窗体处理的源程序代码(mdi.cs),具体如下:
  mdi.cs源程序代码:
 

[C#] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System ;
   using System.Windows.Forms ;
   using System.ComponentModel ;
   using System.Drawing ;
   //导入在程序中用到的名称空间
   class MDIDemo : Form
  {
   private static int FormCount = 1 ;
   //定义此常量是为了统计MDI窗体数目,
  MainMenu mnuMain = new MainMenu ( ) ;
  MenuItem FileMenu ;
  MenuItem NewMenu ;
  MenuItem ExitMenu ;
  MenuItem WindowMenu ;
   public MDIDemo ( )
  {
   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 ( ) ;
  ExitMenu.Text = "退出(&X)" ;
  ExitMenu.Click += new EventHandler ( Exit_Click ) ;
  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 Exit_Click ( object sender , EventArgs e )
  {
   this .Dispose ( );
  Application.Exit ( ) ;
  }
   public static void Main ( )
  {
  Application.Run ( new MDIDemo ( ) ) ;
  }
  }

 再经过以下编译命令编译过以后,就可以得到执行程序:
  csc /t:winexe /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll mdi.cs
  四.总结:
  本文主要是介绍如何用Visual C#来实现对MDI窗体的编程。即:新建MDI窗体、MDI窗体层叠、MDI窗体水平平铺、MDI窗体的垂直平铺。通过上述介绍,可见,在Visual C#中处理MDI还是相当比较简单的。
不过说实现在我不建议大家这样实现了,而是

C#MDI窗体实现多窗口效果相关推荐

  1. 使用MDI窗体实现多窗口效果

    C#MDI窗体实现多窗口效果   Visual C#是微软公司推出的下一代主流程序开发语言,他也是一种功能十分强大的程 序设计语言,正在受到越来越多的编程人员的喜欢.在Visual C#中,提供了为实 ...

  2. html 判断当前窗口是否是子窗口,C#的MDI窗体判断子窗体是否已经打开

    Mdi窗体的设置: IsMdiContainer 设置为true: 子窗体设置: /// /// 显示子窗体 /// /// private void ShowForm(BaseForm _bt) { ...

  3. vb 6 MDI窗体图片自适应源码

    vb 6.0制作的图片可以自适应的MDI窗体,最终完成的效果如截图所示,像不像一个比较专业的信息管理系统的界面效果?不过本实例主要是演示MDI窗体的制作方法,图片如何跟随窗口大小的变化而自动变化,打开 ...

  4. WPF MDI窗体的实现方法

    用了一段时间的WPF,居然发现WPF不支持MDI窗体!这么重要的功能微软居然给忽略了? 微软的开发团队解释:因为WPF带来革命性的窗口布局的新特性,所以不希望再看到 the overlapping w ...

  5. vb如何设置父窗体与子窗体——MDI窗体

    目前我理解的父窗体与子窗体的关系是:父窗体包含子窗体. 想要达到这样的效果,首先要新建一个父窗体(MDI窗体). MDI窗体上又不允许放置PictureBox以外的控件,但是Picture上面就能放置 ...

  6. winform(MDI窗体容器、权限设置)

    一.MDI窗体容器: 1.功能: 它可以让其它窗体在它的内部打开,无法超出它的范围 将某个窗体的属性:IsMdiContainer设置为true - 窗口样式 2.问题: (1)如何将其它窗体在它的内 ...

  7. C#系统开发登录窗体在MDI窗体之前显示

    通常,系统运行时的启动窗体是MDI窗体,起作用的是main()函数的Application.Run(new Mdi())语句,但我们的效果是先显示登录窗体,再显示Mdi窗体.此时,如果将该句改为App ...

  8. vb.net详解MDI窗体操作方法

    MDI窗体可以避免打开窗体的时候被无数个子窗体困扰,我将为大家一一的介绍一下vb.net中MDI窗体的操作方法 一.如何创建MDI窗体? 1.创建mdi主窗体 新建建立一个默认空白的Windows应用 ...

  9. 【Unity编辑器】UnityEditor多重弹出窗体与编辑器窗口层级管理

    一.简介 最近马三为公司开发了一款触发器编辑器,对于这个编辑器策划所要求的质量很高,是模仿暴雪的那个触发器编辑器来做的,而且之后这款编辑器要作为公司内部的一个通用工具链使用.其实,在这款触发器编辑器之 ...

最新文章

  1. CSS与HTML结合
  2. 在php中如何实现cookie即时生效,不用刷新就可以使用
  3. 【解题报告】Leecode. 575. 分糖果——Leecode每日一题系列
  4. synchronized和ReentrantLock区别,用新的lock有什么好处?举例说说
  5. JavaScript获取坐标
  6. java抖音字符视频_代码生成抖音文字视频
  7. php太平洋时间转成北京时间,北京时间 → 太平洋时间 换算表 和太平洋时间 → 北京时间 换算表...
  8. EXCEL单元格换行操作
  9. 服务器能ping通,但是无法ssh
  10. 分页封装实用工具类及其使用方法
  11. scrum立会报告+燃尽图(第三周第三次)
  12. java毕业生设计中小学教务管理平台计算机源码+系统+mysql+调试部署+lw
  13. 腾讯企业 html邮件模板,腾讯企业邮箱DMARC设置指南(TXT记录)
  14. 维克森林大学计算机科学,W 同学_维克森林大学_计算机_录取成功案例分享
  15. 李想这三年主要做了什么?
  16. Java习惯用法总结
  17. 为什么鼓励可以重塑一个职场人?
  18. PyQt5 程序多语言国际化的便捷实现
  19. netty游戏服务器性能,Limitart
  20. 江苏事业单位招聘考计算机专业课,江苏事业单位专技岗-计算机类考情分析

热门文章

  1. 取本机IP地址和网卡号
  2. matlab分数约分,分母
  3. 微信小程序渗透测试技巧
  4. 这些片子你猜到结局了吗?
  5. MANTIS新手操作教程
  6. java 月份缩写_Java常用日期、时间格式化转换符
  7. 当电脑80端口被占用怎么办
  8. 【百度快照】基于MATLAB GUI的条形码识别系统
  9. 能够证明“3=0”吗?
  10. iOS每日总结博客版:iOS开发历程中了解和学习的文章