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 ) ;
}
|
实现操作后具体如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/af3d0ec08e7a91d576c30861bd6b612e.gif)
图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 ) ;
}
|
![](https://i-blog.csdnimg.cn/blog_migrate/e57c04c188e35bf7514268646d233d04.gif)
图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 ) ;
}
|
![](https://i-blog.csdnimg.cn/blog_migrate/643ae4031181fe6c7f89cec7372fca85.gif)
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窗体菜单项
点击小图放大
![](https://i-blog.csdnimg.cn/blog_migrate/cf8b8cdd59fa16f73951da4d2e762b8f.gif)
三.程序源代码(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还是相当比较简单的。
不过说实现在我不建议大家这样实现了,而是