设为首页收藏本站language 语言切换
查看: 1439|回复: 0
收起左侧

Visual C#中的MDI编程

[复制链接]
发表于 2010-2-25 10:20:14 | 显示全部楼层 |阅读模式
<p ><ccid_nobr>多文档界面就是所谓的MDI,他是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。在视窗系统3.1版本中,MDI得到了更大范围的应用。其中系统中的程序管理器和文件管理器都是MDI程序。<br/>Visual C#是微软公司推出的下一代主流程序开发语言,他也是一种功能十分强大的程序设计语言,正在受到越来越多的编程人员的喜欢。在Visual C#中,提供了为实现MDI程序设计的很多功能。本文就是通过一个具体的例子来详细的介绍在Visual C#中的MDI编程。<br/><br/><b>一 程序设计及运行的环境:</b><br/>(1)视窗2000服务器版<br/>(2).Net FrameWork SDK Beta 2版<br/><br/><b>二 程序设计的思路、主要步骤和实现方法:</b><br/>MDI编程主要就是要在主窗体中能够新建一个MDI窗体,并且能够对主窗体中的所有MDI窗体实现层叠、水平平铺和垂直平铺。虽然这些操作比较基本,但却是程序设计中的要点和重点。本文就按照上述功能的顺序来一一介绍。<br/>(1)首先要设定主窗体是一个MDI窗体的容器,因为只有如此才能够在此主窗体上面添加MDI窗体,从而实现对MDI编程,具体实现语句如下:<br/><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">this.IsMdiContainer = true ;</td></tr></table><br/>(2)在主窗体上面新建一个MDI窗体。在程序中,新建一个MDI窗体的命令是通过一个菜单的事件来实现的。在处理新建一个MDI窗体事件中,关键是要设定此MDI窗体的父窗体。其实MDI窗体和别的窗体没有什么不同,不同点就在MDI窗体有上一级窗体,即父窗体,而其他窗体是没有的,具体实现语句如下:<br/><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">private void New_Click ( object sender , EventArgs e )//这是一个菜单的事件<br/>{<br/>Form frmTemp = new Form ( ) ;<br/>//新建一个窗体<br/>frmTemp.MdiParent = this ;<br/>//定义此窗体的父窗体,从而此窗体成为一个MDI窗体<br/>frmTemp.Text = "窗体0" + FormCount.ToString ( ) ;<br/>//设定MDI窗体的标题<br/>FormCount++ ;<br/>frmTemp.Show ( ) ;<br/>//把此MDI窗体显示出来<br/>}<br/>(3)实现对MDI窗体的层叠:<br/>对于在主窗体中实现对MDI窗体的层叠操作,在主程序中,是通过一个方法来实现的,这个方法就是LayoutMdi,他所带的参数是MdiLayout.Cascade,具体实现语句如下:<br/>private void Cascade_Click ( object sender , EventArgs e )<br/>// 实现对主窗体中的MDI窗体的层叠操作<br/>{<br/>this.LayoutMdi ( MdiLayout.Cascade ) ;<br/>}<br/></td></tr></table><br/>实现操作后具体如下图:<br/><div align="center"><img  src="http://www.hh010.com/upload_files/article/244/9_ssknm89927.gif"><br/>图01:在主窗体中实现对MDI窗体的层叠操</div><br/>(4)实现对MDI窗体的水平平铺:<br/>要在主窗体实现MDI窗体水平平铺,也是通过LayoutMdi方法,此时所带的参数是MdiLayout.TileHorizontal,具体实现语句如下:<br/><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">private void TileH_Click ( object sender , EventArgs e )<br/>// 实现对主窗体中的MDI窗体的水平平铺操作<br/>{<br/>this.LayoutMdi ( MdiLayout.TileHorizontal ) ;<br/>}<br/></td></tr></table><br/>实现操作后具体如下图:<br/><div align="center"><img  src="http://www.hh010.com/upload_files/article/244/9_1i0hfm9928.gif"><br/>图02:在主窗体中实现对MDI窗体的水平平铺操作</div><br/>(5)实现对MDI窗体的垂直平铺:<br/>要在主窗体实现MDI窗体垂直平铺,也是通过LayoutMdi方法,此时所带的参数是MdiLayout.TileVertical,具体实现语句如下:<br/><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">private void TileV_Click ( object sender , EventArgs e )<br/>// 实现对主窗体中的MDI窗体的垂直平铺操作<br/>{<br/>this.LayoutMdi ( MdiLayout.TileVertical ) ;<br/>}<br/></td></tr></table><br/>实现操作后具体如下图:<br/><div align="center"><img  src="http://www.hh010.com/upload_files/article/244/9_eqcft59929.gif"><br/>图03:在主窗体中实现对MDI窗体的垂直平铺操作</div><br/>(6)在有些MDI程序,当新建一个MDI窗体以后,往往会在某些菜单项的下面生产一个以此MDI窗体的名称为名称的子菜单项。在其他语言中要实现这种功能,可能就要在某些主菜单项下动态的加入子菜单了。但是在Visual C#中实现此种功能,就显得比较简单的,只有在要加入的主菜单项下加入下面一句程序就可以了: <br/>WindowMenu.MdiList = true ; 本程序中,是在"窗口"主菜单项下面加入MDI窗体的子菜单项的。加入此语句后,程序运行界面具体如下图:<br/><div align="center"><img  src="http://www.hh010.com/upload_files/article/244/9_uszt4i9930.gif"><br/>图04:在主窗体中实现在新建一个MDI窗体后会在此主菜单项下显示存在的MDI窗体菜单项</div><br/><b>三. 程序源代码(mdi.cs)及编译方法:</b><br/>通过对程序设计中的难点介绍以后,就可以比较容易得到实现对上述MDI窗体处理的源程序代码(mdi.cs),具体如下:<br/>mdi.cs源程序代码:<br/><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">using System ;<br/>using System.Windows.Forms ;<br/>using System.ComponentModel ;<br/>using System.Drawing ;<br/>// 导入在程序中用到的名称空间<br/>class MDIDemo : Form<br/>{<br/>private static int FormCount = 1 ;<br/>//定义此常量是为了统计MDI窗体数目,<br/>MainMenu mnuMain = new MainMenu ( ) ;<br/>MenuItem FileMenu ;<br/>MenuItem NewMenu ;<br/>MenuItem ExitMenu ;<br/>MenuItem WindowMenu ;<br/><br/>public MDIDemo ( )<br/>{<br/>this.IsMdiContainer = true ;<br/>this.Text = "MDI演示程序" ;<br/>FileMenu = new MenuItem ( ) ;<br/>FileMenu.Text = "文件" ;<br/>WindowMenu = new MenuItem ( ) ;<br/>WindowMenu.Text = "窗口(&W)" ;<br/>WindowMenu.MenuItems.Add ( "窗体层叠(&C)" , new EventHandler ( Cascade_Click ) ) ;<br/>WindowMenu.MenuItems.Add ( "水平平铺(&H)" , new EventHandler ( TileH_Click ) ) ;<br/>WindowMenu.MenuItems.Add ( "垂直平铺(&V)" , new EventHandler ( TileV_Click ) ) ;<br/>WindowMenu.MdiList = true ;<br/>//这一句比较重要,有了这一句就可以实现在新建一个MDI窗体后会在此主菜单项下显示存在的MDI窗体菜单项<br/><br/>NewMenu = new MenuItem ( ) ;<br/>NewMenu.Text = "新建窗体(&N)" ;<br/>NewMenu.Click += new EventHandler ( New_Click ) ;<br/><br/>ExitMenu = new MenuItem ( ) ;<br/>ExitMenu.Text = "退出(&X)" ;<br/>ExitMenu.Click += new EventHandler ( Exit_Click ) ;<br/><br/>FileMenu.MenuItems.Add ( NewMenu ) ;<br/>FileMenu.MenuItems.Add ( new MenuItem ( "-" ) ) ;<br/>FileMenu.MenuItems.Add ( ExitMenu ) ;<br/><br/>mnuMain.MenuItems.Add ( FileMenu ) ;<br/>mnuMain.MenuItems.Add ( WindowMenu ) ;<br/><br/>this.Menu = mnuMain ;<br/>}<br/><br/>private void Cascade_Click ( object sender , EventArgs e )<br/>// 实现对主窗体中的MDI窗体的层叠操作<br/>{<br/>this.LayoutMdi ( MdiLayout.Cascade ) ;<br/>}<br/><br/>private void TileH_Click ( object sender , EventArgs e )<br/>// 实现对主窗体中的MDI窗体的水平平铺操作<br/>{<br/>this.LayoutMdi ( MdiLayout.TileHorizontal ) ;<br/>}<br/><br/>private void TileV_Click ( object sender , EventArgs e )<br/>// 实现对主窗体中的MDI窗体的垂直平铺操作<br/>{<br/>this.LayoutMdi ( MdiLayout.TileVertical ) ;<br/>}<br/><br/><br/>private void New_Click ( object sender , EventArgs e )<br/>{<br/>Form frmTemp = new Form ( ) ;<br/>//新建一个窗体<br/>frmTemp.MdiParent = this ;<br/>//定义此窗体的父窗体,从而此窗体成为一个MDI窗体<br/>frmTemp.Text = "窗体0" + FormCount.ToString ( ) ;<br/>//设定MDI窗体的标题<br/>FormCount++ ;<br/>frmTemp.Show ( ) ;<br/>//把此MDI窗体显示出来<br/>}<br/><br/>private void Exit_Click ( object sender , EventArgs e )<br/>{<br/>this.Dispose ( );<br/>Application.Exit ( ) ;<br/>}<br/>public static void Main ( )<br/>{<br/>Application.Run ( new MDIDemo ( ) ) ;<br/>}<br/>}<br/></td></tr></table><br/>再经过以下编译命令编译过以后,就可以得到执行程序:<br/>csc /t:winexe /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll mdi.cs<br/><br/><b>四. 总结:</b><br/>本文主要是介绍如何用Visual C#来实现对MDI窗体的编程。即:新建MDI窗体、MDI窗体层叠、MDI窗体水平平铺、MDI窗体的垂直平铺。通过上述介绍,可见,在Visual C#中处理MDI还是相当比较简单的。<br/><br/></ccid_nobr><p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-10 15:49 , Processed in 0.101503 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

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