C#MDI 应用程序设计
MDI 应用程序设计
1.MDI应用程序的概念
在前面的章节中,所创建的都是单文档界面(SDI)应用程序。这样的程序(如记事本和画图程序)仅支持一次打开一个窗口或文档。如果需要编辑多个文档,必须创建SDI应用程序的多个实例。而使用多文档界面(MDI)程序(如Word和AdobePhotoshop)时,用户可以同时编辑多个文档。MDI程序中的应用程序窗口称为父窗口,应用程序内部的窗口称为子窗口。虽然 MDI应用程序可以具有多个子窗口, 但是每个子窗口却只能有一个父窗口。此外,处于活动状态的子窗口最大数目是
1。子窗口本身不能再成为父窗口,而且不能移动到它们的父窗口区域之外。除此以外,子窗口的行为与任何其他窗口一样(如可以关闭、最小化和调整大小等)。一个子窗口在功能上可能与父窗口的其他子窗口不同,例如,一个子窗口可能用于编辑图像,另一个子窗口可能用于编辑文本,第 3 个子窗口可以使用图形来显示数据,但是所有的窗口都属于相同的MDI父窗口。
2.与 MDI应用程序设计有关的属性、方法和事件 常用的MDI父窗体属性如下。
(1)ActiveMdiChild属性:该属性用来表示当前活动的MDI子窗口,如果当前没有子窗口,则返回null。
(2)IsMdiContainer属性:该属性用来获取或设置一个值,该值指示窗体是否为多文档界面(MDI)子窗
体的容器,即MDI父窗体。值为true时,表示是父窗体,值为false时,表示不是父窗体。
(3)MdiChildren属性:该属性以窗体数组形式返回MDI子窗体,每个数组元素对应一个 MDI子窗体。
常用的MDI子窗体的属性有:
(1)IsMdiChild属性:该属性用来获取一个值,该值指示该窗体是否为多文档界面(MDI)的子窗体。值
为 true时,表示是子窗体,值为false时,表示不是子窗体。
(2)MdiParent属性:该属性用来指定该子窗体的MDI父窗体。与MDI应用程序设计有关的方法中,一
般只使用父窗体的LayoutMdi方法,该方法的调用格式如下:
MDI父窗体名.LayoutMdi(Value);
该方法用来在MDI父窗体中排列MDI子窗体,以便导航和操作MDI子窗体。参数Value决定排列方式,取值有:MdiLayout.ArrangeIcons(所有 MDI 子窗体以图标的形式排列在 MDI 父窗体的工作区内)、MdiLayout.TileHorizontal (所有MDI子窗口均水平平铺在MDI父窗体的工作区内)、 MdiLayout.TileVertical(所有 MDI 子窗口均垂直平铺在 MDI 父窗体的工作区内)和 MdiLayout.Cascade(所有 MDI 子窗口均层叠在 MDI 父窗体的工作区内)。常用的 MDI 父窗体的事件是 MdiChildActivate,当激活或关闭一个 MDI子窗体时将发生该事件。
3.菜单合并
父窗体和子窗体可以使用不同的菜单,这些菜单会在选择子窗体的时候合并。如果需要指定菜单的合并方式,程序员可以设置每个菜单项的MergeOrder属性和MergeType属性。
(1)MergeOrder属性:用来确定当两个菜单合并时菜单项出现的顺序,具有较低 MergeOrder的菜单项会首先出现。
(2)MergeType属性:当合并的两个菜单的某些菜单项的MergeOrder属性值相等时,
使用该属性可以控制这些菜单项的显示方式。
浙公网安备 33010602011771号