任务四 文档程序设计
本部分围绕WinForm文档程序设计展开,核心包含菜单设计、单文档界面(SDI)、**多文档界面(MDI)**三大模块,覆盖菜单的分类/实现、两种文档界面的核心概念与MDI的关键配置/布局方法,具体总结如下:
一、菜单设计
1. 菜单核心分类与结构
菜单按使用形式分为两类,核心结构包含菜单栏、菜单项、子菜单、分隔条、热键/快捷键等要素:
| 菜单类型 | 核心定义 | 关键标识与特性 |
|---|---|---|
| 下拉式菜单 | 位于窗体顶部,通过单击菜单标题展开(如VS的“文件”菜单) | ①菜单项带…表示打开对话框;②右侧三角表示有子菜单(最多六级子菜单);③热键(打开菜单后按字母执行)、快捷键(全局执行) |
| 弹出式菜单 | 右键单击控件触发,不同区域对应不同菜单 | 需与控件关联,右键触发显示 |
2. 下拉式菜单(MenuStrip)实现
- 核心控件:
MenuStrip(菜单容器),菜单项为ToolStripMenuItem对象。 - 设计步骤:
- 双击工具箱
MenuStrip,窗体底部出现组件对象,顶部显示可视化设计器; - 输入菜单标题/菜单项,右侧同级编辑、下方子菜单编辑;
- 右键菜单项可插入
Separator分隔条,用于命令分组; - 编辑/删除菜单项:单击修改文本,右键选择“删除”。
- 双击工具箱
- 核心属性(
ToolStripMenuItem):Text(显示文本)、ShortcutKeys(快捷键)、Image(图标)、Enabled(是否可用)、Checked(选中标记)等。 - 事件与实战:菜单项核心事件为
Click,需编写事件逻辑实现功能(如教材中“打开”菜单项调用OpenFileDialog,“全部保存”调用SaveFileDialog)。
3. 弹出式菜单(ContextMenuStrip)实现
- 核心控件:
ContextMenuStrip,设计方式与下拉菜单一致; - 关键步骤:设计菜单后,将目标控件的
ContextMenuStrip属性关联该菜单对象,右键控件即可触发弹出式菜单。
二、单文档界面(SDI)
1. 核心定义
单文档界面(Single Document Interface, SDI):一次只能打开一个窗体/一个文档,关闭当前文档后才能操作新文档,是基础的WinForm应用结构(教材中此前创建的程序均为SDI)。
2. 核心特点
结构简单、操作逻辑单一,适用于功能简单的小型应用(如记事本基础版)。
三、多文档界面(MDI)
1. 核心定义
多文档界面(Multiple Document Interface, MDI):由**父窗体(容器)和子窗体(文档)**组成,父窗体为容器、子窗体嵌套在父窗体内,可同时打开多个子文档(如Word、Excel);关闭父窗体时,所有子窗体自动关闭。
2. 核心属性配置
| 属性 | 作用 | 配置规则 |
|---|---|---|
IsMdiContainer | 标识窗体是否为MDI父窗体 | 父窗体设为true,子窗体保持默认false |
IsMdiChild | 标识窗体是否为MDI子窗体 | 只读属性,子窗体自动标识为true |
MdiParent | 指定子窗体的父窗体 | 子窗体实例化后设置为this(当前父窗体) |
3. 关键方法与布局
- 激活子窗体:
ActivateMdiChild(子窗体对象),用于激活指定的MDI子窗体。 - 排列子窗体:
父窗体.LayoutMdi(MDILayout枚举值),MDILayout枚举包含四种布局方式:枚举成员 布局效果 ArrangeIcons所有子窗体以图标形式排列 Cascade所有子窗体层叠排列 TileHorizontal所有子窗体水平平铺 TileVertical所有子窗体垂直平铺
4. 核心事件
MdiChildActivate:当MDI子窗体被激活时触发该事件,可用于子窗体激活后的逻辑处理。
5. 实战实现步骤
- 父窗体设置:将父窗体(如Form1)的
IsMdiContainer属性设为true; - 子窗体创建:实例化子窗体对象,设置
MdiParent = this; - 布局功能:在父窗体添加“排列方式”菜单,通过
LayoutMdi方法调用不同枚举值,实现子窗体的图标/层叠/平铺排列。
四、核心实战任务
- 菜单设计实战:模拟VS“文件”菜单,通过
ToolStripMenuItem创建“打开”“全部保存”等菜单项,绑定Click事件调用通用对话框(OpenFileDialog/SaveFileDialog); - MDI实战:创建父窗体+三个子窗体,添加“排列方式”菜单,通过
LayoutMdi实现子窗体的图标、层叠、水平/垂直平铺布局。
五、核心要点总结
- 菜单设计依赖
MenuStrip(下拉)和ContextMenuStrip(弹出),核心是配置ToolStripMenuItem属性并编写Click事件; - SDI适用于单文档场景,MDI适用于多文档场景,核心区别在于父/子窗体的嵌套关系;
- MDI的核心是
IsMdiContainer和MdiParent属性配置,LayoutMdi方法是实现子窗体布局的关键。