如何:更改菜单命令的文本

使用托管代码和 IMenuCommandService 服务,下面的步骤演示如何更改菜单命令的文本标签。

过程

使用 IMenuCommandService,更改菜单命令标签

  1. 创建一个名为的 VSPackage,例如, MenuText。 在 VSPackage 向导运行时,选择的 菜单命令 并接受所有的默认值。

  2. ,如下面的示例所示 .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>
    
  3. 在 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";
        }
    }
    

    您可以通过更改 VisibleCheckedEnabled 属性还更新菜单命令的状态在此方法中 OleMenuCommand 对象。

  4. 添加执行以下操作的代码,在 VSPackage 初始化时。

    1. 菜单命令服务的查询。

    2. 创建表示菜单命令的一 OleMenuCommand 对象。

    3. 添加 BeforeQueryStatus 事件处理程序。

    4. 将菜单命令菜单命令服务。 您必须更改 MenuCommandOleMenuCommand,如下面的示例所示。

    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.DesignMicrosoft.VisualStudio.Shell 命名空间访问 IMenuCommandService 接口和 OleMenuCommand 对象。

请参见

其他资源

使用命令、菜单和工具栏的常规任务