1-4 多文档界面处理(MDI)

简介:

1-4  多文档界面处理(MDI

u      本节学习目标:
n  理解  MDI SDI 的概念和差别
n  熟练设置 MDI 窗体及一般窗体的主要属性设置
n  掌握并实现对 MDI 窗体的排列技巧
n  掌握并实现多文档界面的窗体传值技术

1-4-1   简介

我们在前面所设计的窗口被称为是单文档窗口(SDI),如图1-18所示。但很多时候的应用软件是在多文档窗口环境下进行开发设计的,这种多文档界面就是所谓的MDI,是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,这是因为Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。在视窗系统3.1版本中,MDI得到了更大范围的应用。其中系统中的程序管理器和文件管理器都是MDI程序。
1-18   一般的单文档( SDI )界面
MDI 编程主要是在主窗体中能够新建一个MDI窗体,并且能够对主窗体中的所有MDI窗体实现层叠、水平平铺和垂直平铺。虽然这些操作比较基本,但却是程序设计中的要点和重点。

1-4-2   多文档界面设置及窗体属性

1.多文档界面(MDI)属性说明

一般生成的窗体都属于单文档窗体(SDI),只有将单文档窗体的IsMdiContainer属性设置成为True,才可以被设置成为多文档窗体。见图1-19所示。
1-19   由单文档( SDI )改成为多文档( MDI )界面
多文档界面的基本属性其实也就是窗体的属性,窗体主要属性、方法和事件见下表1-7所示:
属性
说明
StartPosition   
初始窗口位置。一般为了使得窗体启动时候居中对齐,多设置该属性值为CenterScreen
CancelButton
该属性可以提供自动搜寻当前窗体之中的所有Button对象,通过列表有用户确认按下esc键后执行那个Button按钮。
ControlBox   
确定系统是否有图标和最大最小关闭按钮。属性值为truefalse,当为false时候则无法看到标题栏目图标和最大最小关闭按钮
FormBorderStyle 
指定边框和标题栏的外观和行为。共有七中效果可供选择,比如选择FixedToolWindow的时候,仅存关闭按钮,没有最大和最小按钮。
HelpButton   
确定窗体的标题栏上是否有帮助按钮。
KeyPreview   
确定窗体键盘事件是否已经向窗体注册。
MainMenuStrip     
确定键盘激活和多文档合并。
ShowInTaskbar    
确定窗体是否出现在任务栏中。
WindowState       
确定窗体的初始可视状态。共有三种状态,Normal为正常态,Maximized为初始最大化,Minimized为初始最小化。
方法
说明
Activate    
当窗体被激活时候发生
MdiChildActivate    
MDI子窗体被激活时候发生
事件
说明
Activated  
每当窗体被激活时候发生
Load
每当用户加载窗体时候发生
1-7  MessageBox.Show() 方法重载
请读者自行根据属性提示内容,简单尝试窗体属性的性质和效果。

2案例学习:建立多文档界面(MDI

本次实验目标是首先建立一个 Form 主窗体,并在该主窗体之中建立菜单,通过菜单打开其余的子窗体。最终显示界面如图1-17所示。
1-20   多文档主界面
u  实验步骤(1):
 
由图1-18所示,首先将当前操作的Form窗体属性设置如下:
属性名称
属性参数设置
说明
text   
父窗口
窗体标签名称
StartPosition
CenterScreen
窗体居中
FormBorderStyle   
FixedToolWindow
无最大最小按钮
IsMdiContainer
True
设为MDI主窗口
 
u  实验步骤(2):
为该MDI窗体配置MainMenu菜单,工具箱默认没有该控件,打开工具箱的所有Windows控件部分,用右键单击工具箱界面,在打开的菜单中选择“选择项”,并在展开的系统选择项中寻找MainMenu控件,添加后即出现在Windows控件部分。具体操作如图1-21所示:
1-21   MDI 窗体添加 MainMenu 菜单控件
u  实验步骤(3):
 
打开解决方案资源管理器,新建一个Windows窗体,取名为Form2,该窗体并非MDI窗体,即无需指定其IsMdiContainer属性为True。双击图1-20中菜单项内的子窗口1,进入代码编辑区域,填写下面代码:
小实验: 子窗口1菜单项鼠标单击事件源代码:
private  void menuItem3_Click(object sender, EventArgs e)
        {
            Form2 Mdichild = new Form2();//首先实例化Form2对象,命名为Mdichild
            Mdichild.MdiParent = this;
           //其次指定即将打开的Form2对象的MdiParent,即Form2对象的MDI父窗口,为当前的主MDI窗口。
            Mdichild.Show();//显示Form2对象的MDI父窗口
}
此时,打开的Form2窗体就只能够在当前窗体下活动,而不会出当前窗体的范围。按照此方法,再建立两个窗体,命名为Form3和 Form4,并可以通过子窗口2和子窗口3菜单单击打开它们。

3   案例学习:实现对MDI窗体的排列

1)实现对MDI窗体的层叠
对于在主窗体中实现对MDI窗体的层叠操作,在主程序中是通过一个方法LayoutMdi来实现的,他所带的参数是MdiLayout.Cascade,在原有的menuItem3_Click事件中添加如下代码:
小实验: MDI窗体的层叠源代码:
private  void menuItem3_Click(object sender, EventArgs e)
        {
             …… .
            this.LayoutMdi(MdiLayout.Cascade);
 }
2)实现对MDI窗体的水平平铺
要在主窗体实现 MDI 窗体水平平铺,也是通过 LayoutMdi 方法,此时所带的参数是 MdiLayout.TileHorizontal 在原有的menuItem3_Click事件中修改如下代码:
小实验: MDI窗体的水平平铺源代码:
private  void menuItem3_Click(object sender, EventArgs e)
        {
            ……
            this.LayoutMdi(MdiLayout.TileHorizontal);
 }
3)实现对MDI窗体的垂直平铺
要在主窗体实现MDI窗体垂直平铺,也是通过LayoutMdi方法,此时所带的参数是MdiLayout.TileVertical,在原有的menuItem3_Click事件中修改如下代码:
小实验: MDI窗体的垂直平铺源代码:
private  void menuItem3_Click(object sender, EventArgs e)
        {    ……
            this.LayoutMdi(MdiLayout.TileVertical);
 }
以上内容实验结果如下图1-22所示:
1-22  MDI 窗体排列子窗体的多种方式




本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/201520,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
97 0
|
5月前
|
开发框架 前端开发 JavaScript
在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
|
7月前
|
Linux
Qt实现多文档窗口
Qt实现多文档窗口
|
编解码 监控 图形学
Unity 窗口界面的简单介绍
Unity 窗口界面的简单介绍
488 0
Unity 窗口界面的简单介绍
Qt-网易云音乐界面实现-1 窗口隐藏拖拽移动,自定义标题栏
最近也换了公司,也换了新的工作,工资也象征性的涨了一点点,但是最近心里还是慌慌,不知道为什么,没有那种踏实感,感觉自己随时可以被抛弃的感觉。感觉自己在荒废时间,也感觉自己在浪费生命。
305 0
Qt-网易云音乐界面实现-1 窗口隐藏拖拽移动,自定义标题栏
|
数据安全/隐私保护