如何:更改菜单命令的文本
使用托管代码和 IMenuCommandService 服务,下面的步骤演示如何更改菜单命令的文本标签。
过程
使用 IMenuCommandService,更改菜单命令标签
创建一个名为的 VSPackage,例如, MenuText。 在 VSPackage 向导运行时,选择的 菜单命令 并接受所有的默认值。
,如下面的示例所示 .vstc 文件中,添加 TextChanges 标志向菜单命令,。
<Button guid="guidMenuTextCmdSet" id="cmdidMyCommand" priority="0x0100" type="Button"> <Parent guid="guidMenuTextCmdSet" id="MyMenuGroup" /> <Icon guid="guidImages" id="bmpPic1" /> <CommandFlag>TextChanges</CommandFlag> <Strings> <CommandName>cmdidMyCommand</CommandName> <ButtonText>My Command name</ButtonText> </Strings> </Button>
在 VSPackage 中,,在菜单命令显示之前,请创建一个事件处理程序将调用。
Private Sub OnBeforeQueryStatus(ByVal sender As Object, ByVal e As EventArgs) Dim myCommand As OleMenuCommand = TryCast(sender, OleMenuCommand) If myCommand IsNot Nothing Then myCommand.Text = "New Text" End If End Sub
private void OnBeforeQueryStatus(object sender, EventArgs e) { var myCommand = sender as OleMenuCommand; if (null != myCommand) { myCommand.Text = "New Text"; } }
您可以通过更改 Visible、 Checked和 Enabled 属性还更新菜单命令的状态在此方法中 OleMenuCommand 对象。
添加执行以下操作的代码,在 VSPackage 初始化时。
菜单命令服务的查询。
创建表示菜单命令的一 OleMenuCommand 对象。
添加 BeforeQueryStatus 事件处理程序。
将菜单命令菜单命令服务。 您必须更改 MenuCommand 到 OleMenuCommand,如下面的示例所示。
Dim menuCommandID As CommandID = New CommandID(GuidList.guidMenuTextCmdSet, CInt(PkgCmdIDList.cmdidMyTextCommand)) Dim menuItem As OleMenuCommand = New OleMenuCommand(New EventHandler(AddressOf MenuItemCallback), menuCommandID) AddHandler menuItem.BeforeQueryStatus, AddressOf OnBeforeQueryStatus mcs.AddCommand(menuItem)
// Create the command for the menu item. CommandID menuCommandID = new CommandID(GuidList.guidMenuTextCmdSet, (int)PkgCmdIDList.cmdidMyCommand); OleMenuCommand menuItem = new OleMenuCommand(MenuItemCallback, menuCommandID ); menuItem.BeforeQueryStatus += new EventHandler(OnBeforeQueryStatus); mcs.AddCommand(menuItem);
当您使用包模板创建菜单命令时,它自动添加所需的代码。 但是,在中,因为 MenuCommand 对象和它不添加 BeforeQueryStatus 处理程序,它声明菜单命令。 因此,必须更改菜单命令演示如何使用 OleMenuCommand 并添加下一行的处理程序。
包文件必须包含 System.ComponentModel.Design 和 Microsoft.VisualStudio.Shell 命名空间访问 IMenuCommandService 接口和 OleMenuCommand 对象。