演练:将子菜单添加到菜单

在演示的本演练生成在 演练:添加菜单到 Visual Studio 菜单栏 (c#) 通过演示如何将子菜单。 TestMenu 菜单。

子菜单是显示在另一个菜单的辅助菜单。 子菜单可以通过按其名称的箭头标识。 单击名称导致该子菜单及其显示的命令。

此演练演示在 Visual Studio 菜单栏上的菜单中子菜单创建一个子菜单并将一个新的命令。 此演练还实现了新的命令。

系统必备

若要完成本演练,您必须安装 Visual Studio 2010 SDK。

备注

有关 Visual Studio SDK 的更多信息,请参见 扩展 Visual Studio 概述。若要查找有关中所列如何下载 Visual Studio SDK,请 Visual Studio Extensibility Developer Center 参见 MSDN 网站上。

Visual Studio 包 " 项目模板的位置

Visual Studio 包 " 项目模板可在 新项目 对话框的三个位置:

  • Visual Basic 扩展性下。 该项的默认语言是 Visual Basic。

  • C# 扩展性下。 该项目的默认语言是 C#。

  • 其他项目类型扩展性下。 该项的默认语言是 C++。

创建 VSPackage

创建 TopLevelMenu VSPackage

将子菜单添加到菜单

将子菜单添加到菜单

  1. 解决方案资源管理器,打开 TopLevelMenu.vsct。

  2. 在 <Symbols> 部分,请添加该子菜单的一个 <IDSymbol> 组件,一个子菜单组和一个命令的,所有在名为 “guidTopLevelMenuCmdSet 的 <GuidSymbol> 节点”。这是包含顶级菜单的 <IDSymbol> 元素的同一个节点。

    <IDSymbol name="SubMenu" value="0x1100"/>
    <IDSymbol name="SubMenuGroup" value="0x1150"/>
    <IDSymbol name="cmdidTestSubCommand" value="0x0105"/>
    
  3. 将该新创建的子菜单。 <Menus> 部分。

    <Menu guid="guidTopLevelMenuCmdSet" id="SubMenu"
    priority="0x0100" type="Menu">
      <Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup"/>
      <Strings>
        <ButtonText>Sub Menu</ButtonText>
        <CommandName>Sub Menu</CommandName>
      </Strings>
    </Menu>
    

    GUID/ID 对父指定在 演练:添加菜单到 Visual Studio 菜单栏 (c#)生成的菜单组,也可以是顶级菜单的子级。

  4. 添加中定义的菜单组步骤 2 到 <Groups> 部分并使其成为该子菜单。

     <Group guid="guidTopLevelMenuCmdSet" id="SubMenuGroup"
    priority="0x0000">
       <Parent guid="guidTopLevelMenuCmdSet" id="SubMenu"/>
     </Group>
    
  5. 添加新的 <Button> 元素。 <Buttons> 部分定义中创建的命令步骤 2 作为在子菜单的项目。

    <Button guid="guidTopLevelMenuCmdSet"
    id="cmdidTestSubCommand" priority="0x0000"
    type="Button">
      <Parent guid="guidTopLevelMenuCmdSet" id="SubMenuGroup" />
      <Icon guid="guidImages" id="bmpPic2" />
      <Strings>
        <CommandName>cmdidTestSubCommand</CommandName>
        <ButtonText>Test Sub Command</ButtonText>
      </Strings>
    </Button>
    

    备注

    在 .vsct 文件, <Button> 元素是用于表示按钮、菜单项和其他用户界面元素 (UI)用户可以单击执行命令的泛型构造。

  6. 解决方案资源管理器,右击 TopLevelMenu.vsct 然后单击 重新生成

    执行此生成发生更改的 .vsct 文件。 更正在生成过程中,可能发生的所有错误。 (最常见错误使用 GUID 标签或命令 ID 的错误的大小写;GUID 标签和命令 ID 总是区分大小写。)

  7. 按 F5 打开测试环境调试模式 Visual Studio 的实例。

  8. 单击 TestMenu 会看到一个名为 子菜单的新子菜单。 单击 替换菜单 打开该子菜单和查看新的命令, test 子命令。 单击的内容。 test 子命令 不执行的通知。

    备注

    ,在继续下一节之前,必须关闭实验 Visual Studio 。

添加命令

若要添加对在托管代码的命令支持

  1. 打开 PkgCmdID.cs 或 PkgCmdID.vb 在代码编辑器中。

  2. 在 PkgCmdIDList 类定义现有命令 ID 之后添加以下命令 ID。

    public const int cmdidTestSubCmd = 0x105;
    
  3. 打开 TopLevelMenuPackage.cs 或 TopLevelMenuPackage.vb 在代码编辑器中。

  4. 查找该隐藏的区域标记 Package Members 并单击左边距中的加号展开它。

  5. 查找 Initialize 方法并添加下行,在调用 AddCommand 方法的后面。 符号 SubItemCallback 将为未定义在步骤之后。

                CommandID subCommandID = new CommandID(
    GuidList.guidTopLevelMenuCmdSet,
    (int)PkgCmdIDList.cmdidTestSubCmd);
                MenuCommand subItem = new MenuCommand(
                    new EventHandler(SubItemCallback), subCommandID);
                mcs.AddCommand(subItem);
    
  6. 在类的末尾,在 MenuItemCallback 方法的后面,添加以下方法。 这是调用方法,当在子菜单的新命令单击时。

    private void SubItemCallback(object sender, EventArgs e)
    {
        IVsUIShell uiShell = (IVsUIShell)GetService(
            typeof(SVsUIShell));
        Guid clsid = Guid.Empty;
        int result;
        uiShell.ShowMessageBox(
               0,
               ref clsid,
               "My Top Level Menu Package",
               string.Format(CultureInfo.CurrentCulture,
               "Inside {0}.SubItemCallback()",
               this.ToString()),
               string.Empty,
               0,
               OLEMSGBUTTON.OLEMSGBUTTON_OK,
               OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
               OLEMSGICON.OLEMSGICON_INFO,
               0,
               out result);
    }
    
  7. 在**“生成”菜单上,单击“生成解决方案”**以生成解决方案。

  8. 按 F5 打开的实验 Visual Studio的实例。

  9. TestMenu 菜单上,单击 子菜单 然后单击 test 子命令。 消息框将出现并显示文本, “于 Company.TopLevelMenu.TopLevelMenuPackage.SubItemCallback()”。

请参见

任务

演练:添加菜单到 Visual Studio 菜单栏 (c#)

其他资源

命令、菜单和工具栏的演练

命令、菜单和工具栏