在 Windows 窗体 MenuStrip 控件中合并菜单项

如果你有多文档界面(MDI)应用程序,则可以将子窗体中的菜单项或整个菜单合并到父窗体的菜单中。

本主题介绍与 MDI 应用程序中合并菜单项相关的基本概念。

一般概念

合并过程涉及目标和源控制:

  • 目标是要将菜单项合并到其中的主窗体或 MDI 父窗体上的 MenuStrip 控件。

  • 源是 MDI 子窗体上的 MenuStrip 控件,该控件包含您希望合并到目标菜单的菜单项。

MdiWindowListItem 属性标识你将使用当前 MDI 父窗体的 MDI 子项的标题填充其下拉列表的菜单项。 例如,你通常会列出当前在“窗口”菜单上打开的 MDI 子级

IsMdiWindowListEntry 属性标识哪些菜单项来自 MDI 子窗体上的 MenuStrip

可以手动或自动合并菜单项。 两种方法的菜单项以相同的方式合并,但其启动方式不同,详见本主题后面的“手动合并”和“自动合并”部分。 在手动和自动合并中,每个合并操作都会影响下一个合并操作。

MenuStrip 合并将菜单项从一个 ToolStrip 移动到另一个,而不是克隆它们,就像 MainMenu 的情况一样。

MergeAction 值

使用 MergeAction 属性在源 MenuStrip 中的菜单项上设置合并操作。

下表描述了可用合并操作的含义和典型用法。

MergeAction 值 描述 典型使用
Append (默认值)将源项添加到目标项集合的末尾。 当程序的某些部分被激活时,将菜单项添加到菜单的末尾。
Insert 将源项按照源项上设置的 MergeIndex 属性指定的位置,添加到目标项的集合中。 激活程序某些部分时,将菜单项添加到菜单的中间或开头。

如果两个菜单项的 MergeIndex 值相同,则按相反顺序添加它们。 适当设置 MergeIndex 以保留原始顺序。
Replace 查找文本匹配项,或者在找不到文本匹配项时使用 MergeIndex 值,然后将匹配的目标菜单项替换为源菜单项。 将目标菜单项替换为执行不同操作的相同名称的源菜单项。
MatchOnly 查找文本匹配项,或者如果未找到任何文本匹配项,则使用 MergeIndex 值,然后将源中的所有下拉列表项添加到目标。 生成一个菜单结构,用于将菜单项插入或添加到子菜单中,或者从子菜单中删除菜单项。 例如,可以将一个菜单项从 MDI 子项添加到主 MenuStrip“另存为”菜单

MatchOnly 使你无需执行任何操作即可浏览菜单结构。 它提供了一种评估后续项的方法。
Remove 查找文本匹配项,或者如果未找到任何文本匹配项,则使用 MergeIndex 值,然后从目标中删除该项。 从目标 MenuStrip中删除菜单项。

手动合并

只有 MenuStrip 控件参与自动合并。 若要合并其他控件(如 ToolStripStatusStrip 控件)的项,必须根据需要在代码中调用 MergeRevertMerge 方法来手动合并它们。

自动合并

可以通过激活源表单在 MDI 应用程序中使用自动合并。 若要在 MDI 应用程序中使用 MenuStrip,请将 MainMenuStrip 属性设置为目标 MenuStrip,以便合并对源 MenuStrip 执行的操作反映在目标 MenuStrip中。

可以通过激活 MDI 源上的 MenuStrip 来触发自动合并。 激活后,源 MenuStrip 将合并到 MDI 目标中。 当新窗体变为活动状态时,合并将在最后一个窗体上还原,并在新窗体上触发。 可以通过在每个 ToolStripItem上根据需要设置 MergeAction 属性,并在每个 MenuStrip上设置 AllowMerge 属性来控制此行为。

另请参阅