演练:创建具有菜单合并功能和 ToolStrip 控件的 MDI 窗体

System.Windows.Forms 命名空间支持多文档界面 (MDI) 应用程序,而 MenuStrip 控件支持菜单合并。 MDI 窗体还可支持 ToolStrip 控件。

本演练演示如何将 ToolStripPanel 控件和 MDI 窗体配合使用。 此窗体还支持菜单与子菜单合并。 本演练演示了以下任务:

  • 创建 Windows 窗体项目。

  • 为窗体创建主菜单。 菜单的实际名称将有所不同。

  • ToolStripPanel 控件添加到“工具箱”

  • 创建子窗体。

  • 按 z 顺序排列 ToolStripPanel 控件。

完成后,你将拥有一个支持菜单合并和可移动 ToolStrip 控件的 MDI 窗体。

要将本主题中的代码复制为单个列表,请参阅如何:使用菜单合并和 ToolStrip 控件创建 MDI 窗体

先决条件

要完成本演练,必须具有 Visual Studio。

创建项目

  1. 在 Visual Studio 中,创建一个名为 MdiForm 的 Windows 应用程序项目(“文件”>“新建”>“项目”>“Visual C#”或“Visual Basic”>“经典桌面”>“Windows 窗体应用程序”)

  2. 在“Windows 窗体设计器”中选择窗体。

  3. 在“属性”窗口中,将 IsMdiContainer 的值设置为 true

创建主菜单

父级 MDI 窗体包含主菜单。 主菜单有一个名为“窗口”的菜单项。 使用“窗口”菜单项,可以创建子窗体。 子窗体中的菜单项合并到主菜单中。

  1. 从“工具箱”中,将 MenuStrip 控件拖到窗体上

  2. MenuStrip 控件添加一个 ToolStripMenuItem,并将其命名为“窗口”

  3. 选择 MenuStrip 控件。

  4. 在“属性”窗口中,将 ToolStripMenuItem1 属性的值设置为 MdiWindowListItem

  5. 向“窗口”菜单项添加子项,然后将子项命名为“新建”

  6. 在“属性”窗口中,单击“事件”

  7. 双击 Click 事件。

    Windows 窗体设计器为 Click 事件生成事件处理程序。

  8. 将下面的代码插入事件处理程序。

    // This method creates a new ChildForm instance
    // and attaches it to the MDI parent form.
    private void newToolStripMenuItem_Click(object sender, EventArgs e)
    {
        ChildForm f = new ChildForm();
        f.MdiParent = this;
        f.Text = "Form - " + this.MdiChildren.Length.ToString();
        f.Show();
    }
    
    ' This method creates a new ChildForm instance 
    ' and attaches it to the MDI parent form.
     Private Sub newToolStripMenuItem_Click( _
     ByVal sender As Object, _
     ByVal e As EventArgs) _
     Handles newToolStripMenuItem.Click
    
         Dim f As New ChildForm()
         f.MdiParent = Me
         f.Text = "Form - " + Me.MdiChildren.Length.ToString()
         f.Show()
    
     End Sub
    

将 ToolStripPanel 控件添加到工具箱

MenuStrip 控件与 MDI 窗体一起使用时,必须具有 ToolStripPanel 控件。 必须将 ToolStripPanel 控件添加到“工具箱”中,以在 Windows 窗体设计器中生成 MDI 窗体

  1. 打开“工具箱”,然后单击“所有 Windows 窗体”选项卡以显示可用的 Windows 窗体控件

  2. 右键单击以打开快捷菜单,然后选择“选择项”

  3. 在“选择工具箱项”对话框中,向下滚动“名称”列,直到找到“ToolStripPanel”

  4. 选择“ToolStripPanel”前面的复选框,然后单击“确定”

    ToolStripPanel 控件显示在“工具箱”中

创建子窗体

在此过程中,将定义一个单独的子窗体类,它具有自己的 MenuStrip 控件。 此窗体的菜单项与父窗体的菜单项合并。

  1. 向项目添加一个名为 ChildForm 的新窗体。

    有关详细信息,请参阅如何:向项目添加 Windows 窗体

  2. 从“工具箱”中,将 MenuStrip 控件拖到子窗体上

  3. 单击MenuStrip控件的设计器操作字形 (Small black arrow),然后选择“编辑项”

  4. 在“项集合编辑器”对话框中,向子菜单添加名为 ChildMenuItem 的新 ToolStripMenuItem

    有关详细信息,请参阅 ToolStrip 项集合编辑器

测试表单

  1. 按 F5 编译并运行窗体

  2. 单击“窗口”菜单项以打开菜单,然后单击“新建”

    在窗体的 MDI 工作区中创建一个新的子窗体。 子窗体的菜单与主菜单合并。

  3. 关闭子窗体。

    子窗体的菜单将从主菜单中删除。

  4. 多次单击“新建”

    子窗体自动列出在“窗口”菜单项下,因为已分配了 MenuStrip 控件的 MdiWindowListItem 属性

添加 ToolStrip 支持

在此过程中,将向 MDI 父窗体添加四个 ToolStrip 控件。 每个 ToolStrip 控件都添加到停靠在窗体边缘的 ToolStripPanel 控件中。

  1. 从“工具箱”中,将 ToolStripPanel 控件拖到窗体上

  2. 选中 ToolStripPanel 控件后,双击“工具箱”中的 ToolStrip 控件

    ToolStripPanel 控件中创建了一个 ToolStrip 控件。

  3. 选择 ToolStripPanel 控件。

  4. 在“属性”窗口中,将控件的 Dock 属性值更改为 Left

    ToolStripPanel 控件停靠在窗体左侧,位于主菜单下方。 MDI 工作区调整大小以适应 ToolStripPanel 控件。

  5. 重复步骤 1 到 4。

    将新的 ToolStripPanel 控件停靠到窗体顶部。

    ToolStripPanel 控件停靠在主菜单下方,但位于第一个 ToolStripPanel 控件的右侧。 此步骤说明了 z 顺序对正确放置 ToolStripPanel 控件的重要性。

  6. 对另外两个 ToolStripPanel 控件重复步骤 1 到 4。

    将新的 ToolStripPanel 控件停靠在窗体的右侧和底部。

按 Z 顺序排列 ToolStripPanel 控件

停靠在 MDI 窗体上的 ToolStripPanel 控件的位置由控件在 z 顺序中的位置决定。 可以在“文档大纲”窗口中轻松排列控件的 z 顺序。

  1. 在“视图”菜单中,单击“其他窗口”,然后单击“文档大纲”

    在前面的过程中,ToolStripPanel 控件的排列不标准。 这是因为 z 顺序不正确。 使用“文档大纲”窗口更改控件的 z 顺序。

  2. 在“文档大纲”窗口中,选择“ToolStripPanel4”

  3. 重复单击向下箭头按钮,直到“ToolStripPanel4”位于列表底部

    “ToolStripPanel4”控件停靠在窗体底部,位于其他控件的下方

  4. 选择“ToolStripPanel2”

  5. 单击向下箭头按钮一次,将该控件放置在列表中的第三个位置。

    “ToolStripPanel2”控件停靠在窗体顶部,位于主菜单下方,其他控件上方

  6. 在“文档大纲”窗口中选择各个控件,并按 z 顺序将它们移动到不同的位置。 请注意 z 顺序对停靠控件位置的影响。 使用 CTRL+Z 或“编辑”菜单上的“撤消”来撤消你的更改

检查点 - 测试窗体

  1. 按 F5 编译并运行窗体

  2. 单击 ToolStrip 控件的手柄并将该控件拖动到窗体上的不同位置。

    可以将 ToolStrip 控件从一个 ToolStripPanel 控件拖动到另一个。

后续步骤

在本演练中,你已创建了 ToolStrip 控件与菜单合并的 MDI 父窗体。 可以将 ToolStrip 系列控件用于许多其他目的:

另请参阅