Можно ли добавить более одной команды в надстройку Visual Studio? - PullRequest
1 голос
/ 03 марта 2011

Я хочу иметь возможность создавать надстройку Visual Studio с помощью ряда команд.В методе надстройки OnConnection мастер генерирует этот шаблон:

Command command = commands.AddNamedCommand2(_addInInstance, "MyAddin", "MyAddin", 
  "Executes the command for MyAddin", true, 59, ref contextGUIDS, ... )

Это создает единственную команду для MyAddin в меню Сервис, но любая попытка создания дальнейших команд игнорируется:

    Command command = commands.AddNamedCommand2(_addInInstance, "MyAddin command2", "MyAddin command2", 
  "Executes the command for MyAddin command 2", true, 59, ref contextGUIDS, ... )

Это ограничение самих надстроек, что они могут соответствовать только одному пункту меню?Или это нужно делать по-другому?Должен ли я писать VSPackage вместо этого?

1 Ответ

2 голосов
/ 20 апреля 2011

Я обнаружил, что на самом деле вы не ограничены созданием одной команды в AddIn.Проблема оказалась в том, что в именах команд не должно быть пробелов, как в предыдущем примере.В методе Connect моего надстройки у меня теперь есть цикл, который перебирает список команд, добавляет их в список команд приложения и добавляет для них новый CommandBar:

public class MyCommandDef {
  public String Name;
  public String MenuText;
  public String Binding;
}

...

 foreach (MyCommandDef command in CommandList.Commands) {
   try {
     Command newCmd = commands.AddNamedCommand(_addInInstance, command.Name, command.MenuText, "", true, 59, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled);
     if (command.Binding != null) {
       newCmd.Bindings = command.Binding;
     }
     CommandBarControl newCmdControl = (CommandBarControl)newCmd.AddControl(myCommandBar, myCommandBar.accChildCount + 1);
     if (lastCategory != command.Category) {
       // add a separator. how?
       if (newCmdControl!=null) {
         newCmdControl.BeginGroup=true;
       }
       lastCategory = command.Category;
     }
    } 
    catch (System.ArgumentException) {
      // command already exists, or has a space in it
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...