在某些应用程序中,多文档界面 (MDI) 子窗口的类型可能与 MDI 父窗口的类型不同。 例如,MDI 父窗口可能为电子表格,而 MDI 子窗口可能为图表。 在这种情况下,您需要在不同类型的 MDI 子窗口被激活时,用 MDI 子窗口的菜单内容更新 MDI 父窗口的菜单内容。
下面的过程使用 IsMdiContainer、AllowMerge、MergeAction 和 MergeIndex 属性将 MDI 子菜单的一组菜单项插入到 MDI 父菜单的下拉部分。 关闭 MDI 子窗口可以将插入的菜单项从 MDI 父窗口移除。
将 MenuStrip 插入到 MDI 下拉菜单中
- 创建一个窗体并将其 IsMdiContainer 属性设置为 true。 
- 将一个 MenuStrip 添加到 Form1 中并将 MenuStrip 的 AllowMerge 属性设置为 true。 
- 将三个子菜单项添加到 &File 菜单项中,并将它们的 Text 属性设置为 &Open、&Import from 和 E&xit。 
- 将两个子菜单项添加到 &Import from 子菜单项,并将它们的 Text 属性设置为 &Word 和 &Excel。 
- 将一个窗体添加到项目中,将一个 MenuStrip 添加到该窗体,并将 Form2 MenuStrip 的 AllowMerge 属性设置为 true。 
- 将子菜单项按照以下顺序添加到 Form2 的 &File 菜单:ToolStripSeparator、&Save、&Close and Save 和另一个 ToolStripSeparator。 
- 设置 Form2 菜单项的 MergeAction 和 MergeIndex 属性,如下表所示。 - Form2 菜单项 - MergeAction 值 - MergeIndex 值 - 文件 - MatchOnly - -1 - Separator - Insert - 2 - 保存 - Insert - 3 - Save and Close - Insert - 4 - Separator - Insert - 5 
- 为 &Open ToolStripMenuItem 的 Click 事件创建一个事件处理程序。 
- 在该事件处理程序内,插入类似于下面代码示例的代码,以创建和显示作为 Form1 的 MDI 子级的 Form2 新实例。 - Private Sub openToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles openToolStripMenuItem.Click Dim NewMDIChild As New Form2() 'Set the parent form of the child window. NewMDIChild.MdiParent = Me 'Display the new form. NewMDIChild.Show() End Sub- [C#] - private void openToolStripMenuItem_Click(object sender, EventArgs e) { Form2 newMDIChild = new Form2(); // Set the parent form of the child window. newMDIChild.MdiParent = this; // Display the new form. newMDIChild.Show(); }
- 将与下面的代码示例类似的代码放置于 &Open ToolStripMenuItem 中,以注册事件处理程序。 - Private Sub openToolStripMenuItem_Click(sender As Object, e As _ EventArgs) Handles openToolStripMenuItem.Click- this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
编译代码
此示例需要:
- 名为 Form1 和 Form2 的两个 Form 控件。 
- 位于 Form1 上的名为 menuStrip1 的 MenuStrip 控件,和位于 Form2 上的名为 menuStrip2 的 MenuStrip 控件。 
- 对 System 和 System.Windows.Forms 程序集的引用。