Vspackage: изменить текст кнопки / подсказки кнопки панели инструментов во время выполнения

StackOverflow https://stackoverflow.com/questions/4014822

Вопрос

Я разрабатываю визуальное расширение студии в качестве надстройки для VS2008 / 2010. Новая версия теперь должна быть выполнена в виде пакета VSIX для VS2010 только (так как он должен быть .NET 4 Во всяком случае), и у меня есть некоторые проблемы с (довольно просто, я бы подумал).

Расширение в первую очередь состоит из панели инструментов с некоторыми кнопками, которые запускают различные действия, формы и т. Д., И несколько, которые используются только в качестве меток для отображения некоторой состояния информации. Сами кнопки «этикетки» просто показывают очень короткую и краткую информацию, в то время как подсказка обеспечивает более подробную информацию.

Хотя я не думал, что вся надстройка была очень элегантна, делая этот вид вещей, была довольно простым (хотя мой подход, возможно, был немного любительственным). При добавлении команд на панель инструментов я бы «сохранил» кнопки «этикетки» в определенных локальных переменных, позволяя мне позже установить заголовок и текст подзаписи по желанию.

В VSPackage, эквивалент Microsoft.visualstudio.commandbars.commandbarbutton по-видимому Олеменукоманд. Отказ Найти команду «этикетки» через Менукомандсервис Нет проблем, модифицируя его по мере необходимости, однако.

С целью выяснения того, как это сделать, у меня просто есть панель инструментов с двумя кнопками в группе. BTNAGE очень просто; Просто значок и исполнительный обработчик, чтобы изменить текст на другой кнопке, без командных файлов.btnlabel. Похоже, в .VSCT:

<Button guid="guidVSPackageBuilderTutorialCommandSet" id="btnLabel" priority="0x0100">
    <CommandFlag>DefaultDisabled</CommandFlag>
    <CommandFlag>DontCache</CommandFlag>
    <CommandFlag>NoCustomize</CommandFlag>
    <CommandFlag>TextChanges</CommandFlag>
    <CommandFlag>TextOnly</CommandFlag>
    <Strings>
        <CommandName>cmdidbtnLabel</CommandName>
        <ButtonText>btnLabel</ButtonText>
        <MenuText>btnLabel</MenuText>
        <ToolTipText>Tooltip btnLabel</ToolTipText>
    </Strings>
</Button>

Первая проблема с этим, когда я использую Текстовые компьютеры, то ToolTiptext строка игнорируется и Stutontext. Первоначально используется для подсказки.

Код обработчика для кнопки действия выглядит следующим образом:

private int iClickCount = 0;

protected override void btnActionExecuteHandler(object sender, EventArgs e)
{
    var svc = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;

    CommandID idBtnLabel = new CommandID(GuidList.guidVSPackageBuilderTutorialCmdSet, (int)PkgCmdIDList.btnLabel);
    var cmd = svc.FindCommand(idBtnLabel) as OleMenuCommand;

    cmd.Text = "Clicked " + (++iClickCount) + " times";
}

Это меняет заголовок btnlabel. как и ожидалось, но поскольку нет способа явным образом указывать всплывающую подсказку ( Олеменукоманд Объект просто имеет Текст Недвижимость, в отличие от CommandBarbutton, который имеет оба Подпись а также ToolTiptext) всплывающая подсказка всегда устанавливается в ту же строку, что и заголовка. Из того, что я понимаю, это потому, что с Findcommand () я на самом деле не получаю кнопку интерфейса UI, но только базовая команда, которая не заботится о подсказках.

Что еще более запутанно, это то, что происходит, когда я использую TextChangesButton Commandflag вместо Текстовые компьютеры. Отказ Кнопка теперь будет правильно отображать текст подсказки, определенный в .vsct, но ни заголовок, ни подсказка не изменится, когда я нажимающую другую кнопку - хотя когда я проверю btnlabel. команда Текст Свойство, установлено на то, что я ожидаю («нажал X раз»). Делает TextChangesButton Вид «отделения» свойства команды и кнопки? Если это так, это в значительной степени то, что я хочу (мне все равно не волнует команду, так как в любом случае нечего выполнять; btnlabel. Всегда будет отключена), но как я могу получить доступ к кнопке и его конкретных строковых свойствах?

Я просматривал различные интерфейсы IVS и услуги SVS, но не смог найти что-то подходящее, и документация (и помощь в области Intellisense), похоже, не очень обширна.

Это было полезно?

Решение

Чтобы ответить на это сам - согласно кому-то из команды VS, новая структура расширяемости не предлагает способам доступа к этим свойствам контроля в таких деталях. За то, что я хочу достичь, необходимо будет пойти на старомодный способ понять объект DTE, найдя свою панель инструментов и мою элементы управления и просто обрабатывать их как CommandBarbuttons, так же, как я делал в моем дополнении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top