Skip to main content

任务四 文档程序设计

本部分围绕WinForm文档程序设计展开,核心包含菜单设计单文档界面(SDI)、**多文档界面(MDI)**三大模块,覆盖菜单的分类/实现、两种文档界面的核心概念与MDI的关键配置/布局方法,具体总结如下:

一、菜单设计

1. 菜单核心分类与结构

菜单按使用形式分为两类,核心结构包含菜单栏、菜单项、子菜单、分隔条、热键/快捷键等要素:

菜单类型核心定义关键标识与特性
下拉式菜单位于窗体顶部,通过单击菜单标题展开(如VS的“文件”菜单)①菜单项带表示打开对话框;②右侧三角表示有子菜单(最多六级子菜单);③热键(打开菜单后按字母执行)、快捷键(全局执行)
弹出式菜单右键单击控件触发,不同区域对应不同菜单需与控件关联,右键触发显示

2. 下拉式菜单(MenuStrip)实现

  • 核心控件MenuStrip(菜单容器),菜单项为ToolStripMenuItem对象。
  • 设计步骤
    1. 双击工具箱MenuStrip,窗体底部出现组件对象,顶部显示可视化设计器;
    2. 输入菜单标题/菜单项,右侧同级编辑、下方子菜单编辑;
    3. 右键菜单项可插入Separator分隔条,用于命令分组;
    4. 编辑/删除菜单项:单击修改文本,右键选择“删除”。
  • 核心属性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. 实战实现步骤

  1. 父窗体设置:将父窗体(如Form1)的IsMdiContainer属性设为true
  2. 子窗体创建:实例化子窗体对象,设置MdiParent = this
  3. 布局功能:在父窗体添加“排列方式”菜单,通过LayoutMdi方法调用不同枚举值,实现子窗体的图标/层叠/平铺排列。

四、核心实战任务

  1. 菜单设计实战:模拟VS“文件”菜单,通过ToolStripMenuItem创建“打开”“全部保存”等菜单项,绑定Click事件调用通用对话框(OpenFileDialog/SaveFileDialog);
  2. MDI实战:创建父窗体+三个子窗体,添加“排列方式”菜单,通过LayoutMdi实现子窗体的图标、层叠、水平/垂直平铺布局。

五、核心要点总结

  1. 菜单设计依赖MenuStrip(下拉)和ContextMenuStrip(弹出),核心是配置ToolStripMenuItem属性并编写Click事件;
  2. SDI适用于单文档场景,MDI适用于多文档场景,核心区别在于父/子窗体的嵌套关系;
  3. MDI的核心是IsMdiContainerMdiParent属性配置,LayoutMdi方法是实现子窗体布局的关键。