Поделиться через


Изменение текста команды меню

Ниже показано, как изменить текстовую метку команды меню с помощью IMenuCommandService службы.

Изменение метки команды меню с помощью IMenuCommandService

  1. Создайте проект VSIX с именем MenuText команды меню с именем ChangeMenuText. Дополнительные сведения см. в разделе "Создание расширения" с помощью команды меню.

  2. В VSCT-файле добавьте TextChanges флаг в команду меню, как показано в следующем примере.

    <Button guid="guidChangeMenuTextPackageCmdSet" id="ChangeMenuTextId" priority="0x0100" type="Button">
        <Parent guid="guidChangeMenuTextPackageCmdSet" id="MyMenuGroup" />
        <Icon guid="guidImages" id="bmpPic1" />
        <CommandFlag>TextChanges</CommandFlag>
        <Strings>
            <ButtonText>Invoke ChangeMenuText</ButtonText>
        </Strings>
    </Button>
    
  3. В файле ChangeMenuText.cs создайте обработчик событий, который будет вызываться перед отображением команды меню.

    private void OnBeforeQueryStatus(object sender, EventArgs e)
    {
        var myCommand = sender as OleMenuCommand;
        if (null != myCommand)
        {
            myCommand.Text = "New Text";
        }
    }
    

    Вы также можете обновить состояние команды меню в этом методе, изменив VisibleCheckedсвойства объекта и Enabled свойства.OleMenuCommand

  4. В конструкторе ChangeMenuText замените исходный код инициализации и размещения исходной командой кодом, создающим OleMenuCommand код (а не а MenuCommand), который представляет команду меню, добавляет BeforeQueryStatus обработчик событий и предоставляет команду меню в службу команд меню.

    Вот как это должно выглядеть:

    private ChangeMenuText(AsyncPackage package, OleMenuCommandService commandService)
    {
        this.package = package ?? throw new ArgumentNullException(nameof(package));
        commandService = commandService ?? throw new ArgumentNullException(nameof(commandService));
    
        var menuCommandID = new CommandID(CommandSet, CommandId);
        var menuItem = new OleMenuCommand(this.Execute, menuCommandID);
        menuItem.BeforeQueryStatus += new EventHandler(OnBeforeQueryStatus);
        commandService.AddCommand(menuItem);
    }
    
  5. Выполните сборку решения и запустите отладку. Появится экспериментальный экземпляр Visual Studio.

  6. В меню "Сервис" должна появиться команда Invoke ChangeMenuText.

  7. Щелкните команду. Появится окно сообщения с объявлением о вызове MenuItemCallback . При закрытии поля сообщения вы увидите, что имя команды в меню "Сервис" теперь является новым текстом.