在 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 属性来控制此行为。

另请参阅