演练:使用菜单合并和 ToolStrip 控件创建 MDI 窗体

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

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

  • 创建 Windows Forms 项目。

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

  • ToolStripPanel 控件添加到 工具箱

  • 创建子窗体。

  • ToolStripPanel按 z 顺序排列控件。

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

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

先决条件

需要 Visual Studio 才能完成本演练。

创建项目

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

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

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

创建主菜单

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

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

  2. 向控件MenuStrip添加ToolStripMenuItem并命名为窗口

  3. 选择 MenuStrip 控件。

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

  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. 单击控件的设计器操作符号(小黑箭头),然后选择“编辑项”。

  4. 项集合编辑器 对话框中,向子菜单添加一个名为 ChildMenuItem 的新项。

    有关详细信息,请参阅 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 窗体上停靠的控件的位置由该控件在 z 顺序中的位置决定 ToolStripPanel。 可以在“文档大纲”窗口中轻松排列控件的 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 系列控件用于许多其他目的:

另请参阅