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
Criar um VSPackage nomeado, por exemplo, MenuText. Quando o assistente VSPackage é executado, selecione Comando de Menu e aceite todos os padrões.
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>
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.
Adicione o código que executa as seguintes ações quando o VSPackage é inicializado.
Consulta para o serviço de comando de menu.
Criar um OleMenuCommand o objeto que representa o comando de menu.
Adicionar o BeforeQueryStatus manipulador de eventos.
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.