Partilhar via


Como: alterar o texto de um comando de Menu

As seguintes etapas mostram como alterar o rótulo de texto de um comando de menu usando código gerenciado e o IMenuCommandService service.

Procedimento

Para alterar um rótulo de comando de menu usando IMenuCommandService

  1. Criar um VSPackage nomeado, por exemplo, MenuText. Quando o assistente VSPackage é executado, selecione Comando de Menu e aceite todos os padrões.

  2. No arquivo .vstc, adicione a TextChanges sinalizador para o comando de menu, conforme mostrado no exemplo a seguir.

    <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. No VSPackage, crie um manipulador de eventos a ser chamado antes que o comando de menu seja exibido.

    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";
        }
    }
    

    Você também pode atualizar o status do comando de menu neste método, alterando a Visible, Checked, e Enabled propriedades de OleMenuCommand objeto.

  4. Adicione o código que executa as seguintes ações quando o VSPackage é inicializado.

    1. Consulta para o serviço de comando de menu.

    2. Criar um OleMenuCommand o objeto que representa o comando de menu.

    3. Adicionar o BeforeQueryStatus manipulador de eventos.

    4. Dar o comando de menu para o serviço de comando de menu. Você deve alterar MenuCommand para OleMenuCommand, como no exemplo a seguir.

    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);
    

    Quando você usa o modelo de pacote para criar um comando de menu, ele adiciona o código necessário automaticamente. No entanto, ele declara que o comando de menu, como um MenuCommand objeto e ele não adiciona o BeforeQueryStatus manipulador. Portanto, você deve alterar a declaração do comando de menu para usar OleMenuCommand e adicionar o manipulador na próxima linha.

    O arquivo de pacote deve incluir a System.ComponentModel.Design e Microsoft.VisualStudio.Shell namespaces para acessar o IMenuCommandService interface e o OleMenuCommand objeto.

Consulte também

Outros recursos

Tarefas comuns com comandos, Menus e barras de ferramentas