我研究了这个link,以便在Visual Studio 2012中使用VSPackage添加自定义菜单命令。
一切都很好,直到我想添加多个菜单项。
在提供的文档中,他们没有解释如何添加一个菜单项。
例如,我在TfsUtility.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>
...
<Group guid="guidTfsUtilityCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidTfsUtilityCmdSet" id="TfsUtility"/>
</Group>
...
<Button guid="guidTfsUtilityCmdSet" id="cmdidMyCommand" priority="0x0100" type="Button">
<Parent guid="guidTfsUtilityCmdSet" id="MyMenuGroup" />
<Strings>
<ButtonText>Branch</ButtonText>
</Strings>
</Button>
...
<GuidSymbol name="guidTfsUtilityCmdSet" value="{d5549d5d-47af-40e0-a7e5-e9ed7f64d577}">
<IDSymbol name="MyMenuGroup" value="0x1020" />
<IDSymbol name="cmdidMyCommand" value="0x0100" />
<IDSymbol name="TfsUtility" value="0x1021"/>
</GuidSymbol>
问题:
如何在菜单选项中添加更多选项(例如After Branch)?
如何为每个菜单项关联命令?我想为每个菜单项显示不同的消息。
非常感谢
答案 0 :(得分:3)
要再添加一个菜单项,请再添加一个具有不同ID的Button部分。
要实现命令,您需要提供MenuItemCallback并将其注册到OleMenuCommandService:
OleMenuCommandService mcs = GetService(typeof(IMenuCommandService))as 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 ); }
有关详细信息,请参阅Command Implementation。
答案 1 :(得分:1)
我找到了解决方案:
在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(对我来说是TfsUtility.vsct)中,在<Buttons>
节点中创建按钮
<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>
在<GuidSymbol>
节点
<IDSymbol name="cmdidChangesets" value="0x0101" />
<IDSymbol name="cmdidCheckin" value="0x0102" />
值0x0101
必须与来自PkgCmdIDList
类的常量值0x101
匹配,并且值必须不同才能显示所有菜单项