C# 如何使用VSPackage在Visual Studio 2012中添加多个菜单项?

C# 如何使用VSPackage在Visual Studio 2012中添加多个菜单项?,c#,visual-studio-2012,sdk,C#,Visual Studio 2012,Sdk,为了在VisualStudio2012中使用VSPackage添加自定义菜单命令,我研究了这一点 一切都很好,直到我想添加更多的菜单项 在提供的文档中,他们没有解释如何再添加一个菜单项 例如,我在tfsutibility.vsct文件中进行了以下设置: <Menus> <Menu guid="guidTfsUtilityCmdSet" id="TfsUtility" priority="0x700" type="Menu"> <Parent

为了在VisualStudio2012中使用VSPackage添加自定义菜单命令,我研究了这一点

一切都很好,直到我想添加更多的菜单项

在提供的文档中,他们没有解释如何再添加一个菜单项

例如,我在
tfsutibility.vsct
文件中进行了以下设置:

<Menus>
    <Menu guid="guidTfsUtilityCmdSet" id="TfsUtility" priority="0x700" type="Menu">
        <Parent guid="guidSHLMainMenu" id="IDG_VS_MM_TOOLSADDINS" />
        <Strings>
            <ButtonText>Tfs Utility</ButtonText>
            <CommandName>Tfs Utility</CommandName>
        </Strings>
    </Menu>
</Menus>

Tfs实用程序
Tfs实用程序



树枝


问题:

  • 如何在菜单选项中添加更多选项(例如分支后)?

  • 如何关联每个菜单项的命令?我想为每个菜单项显示不同的消息

  • 多谢各位

  • 若要再添加一个菜单项,请再添加一个具有不同id的按钮部分

  • 要实现命令,您需要提供MenuItemCallback并向OleMenuCommandService注册它:

  • OleMenuCommandService mcs=GetService(typeof(IMenuCommandService))作为OleMenuCommandService

    if ( null != mcs )
    {
       // Create the command for the menu item.
       CommandID menuCommandID = new CommandID(guidCommandGroup, myCommandID);
       MenuCommand menuItem = new MenuCommand(MenuItemCallback, menuCommandID );
       mcs.AddCommand( menuItem );
    }
    
    有关更多信息,请参阅

  • 若要再添加一个菜单项,请再添加一个具有不同id的按钮部分

  • 要实现命令,您需要提供MenuItemCallback并向OleMenuCommandService注册它:

  • OleMenuCommandService mcs=GetService(typeof(IMenuCommandService))作为OleMenuCommandService

    if ( null != mcs )
    {
       // Create the command for the menu item.
       CommandID menuCommandID = new CommandID(guidCommandGroup, myCommandID);
       MenuCommand menuItem = new MenuCommand(MenuItemCallback, menuCommandID );
       mcs.AddCommand( menuItem );
    }
    
    有关更多信息,请参阅。

    我找到了解决方案:

  • PkgCmdIDList
    页面中,添加一些常量,如:

    public const uint cmdiChangesets = 0x101; // or cmdiYourMenu instead of cmdiChangesets
    public const uint cmdidCheckin = 0x102;
    public const uint cmdidGet = 0x103;
    
  • 为单击事件创建回调(在YourProjectNamePackage中,对于我来说是TfsUtilityPackage),如

    private void TfsMenuItemBranchCallback(object sender, EventArgs e)
    {
        // do something
    }
    
    private void TfsMenuItemPendingCallback(object sender, EventArgs e)
    {
        // do something
    }
    
    ...
    
  • 在XXUtility.vsct(对于me tfsutibility.vsct)中,在
    节点中创建按钮

            <Button guid="guidTfsUtilityCmdSet" id="cmdidChangesets" priority="0x0101" type="Button">
                <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" />
                <Strings>
                    <ButtonText>Changesets</ButtonText>
                </Strings>
            </Button>
    
            <Button guid="guidTfsUtilityCmdSet" id="cmdidCheckin" priority="0x0102" type="Button">
                <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" />
                <Strings>
                    <ButtonText>Pending changes</ButtonText>
                </Strings>
            </Button>
    
    
    变更集
    挂起的更改
    
  • 节点中添加IDSymbol

            <Button guid="guidTfsUtilityCmdSet" id="cmdidChangesets" priority="0x0101" type="Button">
                <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" />
                <Strings>
                    <ButtonText>Changesets</ButtonText>
                </Strings>
            </Button>
    
            <Button guid="guidTfsUtilityCmdSet" id="cmdidCheckin" priority="0x0102" type="Button">
                <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" />
                <Strings>
                    <ButtonText>Pending changes</ButtonText>
                </Strings>
            </Button>
    
    
    

  • 0x0101
    必须与
    PkgCmdIDList
    类中的常量值相匹配,即
    0x101
    ,并且该值必须不同,以便显示所有菜单项

    我找到了解决方案:

  • PkgCmdIDList
    页面中,添加一些常量,如:

    public const uint cmdiChangesets = 0x101; // or cmdiYourMenu instead of cmdiChangesets
    public const uint cmdidCheckin = 0x102;
    public const uint cmdidGet = 0x103;
    
  • 为单击事件创建回调(在YourProjectNamePackage中,对于我来说是TfsUtilityPackage),如

    private void TfsMenuItemBranchCallback(object sender, EventArgs e)
    {
        // do something
    }
    
    private void TfsMenuItemPendingCallback(object sender, EventArgs e)
    {
        // do something
    }
    
    ...
    
  • 在XXUtility.vsct(对于me tfsutibility.vsct)中,在
    节点中创建按钮

            <Button guid="guidTfsUtilityCmdSet" id="cmdidChangesets" priority="0x0101" type="Button">
                <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" />
                <Strings>
                    <ButtonText>Changesets</ButtonText>
                </Strings>
            </Button>
    
            <Button guid="guidTfsUtilityCmdSet" id="cmdidCheckin" priority="0x0102" type="Button">
                <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" />
                <Strings>
                    <ButtonText>Pending changes</ButtonText>
                </Strings>
            </Button>
    
    
    变更集
    挂起的更改
    
  • 节点中添加IDSymbol

            <Button guid="guidTfsUtilityCmdSet" id="cmdidChangesets" priority="0x0101" type="Button">
                <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" />
                <Strings>
                    <ButtonText>Changesets</ButtonText>
                </Strings>
            </Button>
    
            <Button guid="guidTfsUtilityCmdSet" id="cmdidCheckin" priority="0x0102" type="Button">
                <Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" />
                <Strings>
                    <ButtonText>Pending changes</ButtonText>
                </Strings>
            </Button>
    
    
    

  • 0x0101
    必须与
    PkgCmdIDList
    类中的常量值相匹配,该常量值为
    0x101
    ,并且该值必须不同才能显示所有菜单项