Практическое руководство. Вывод надстройки в меню "Сервис" (Visual C#)
Если при создании надстройки с помощью Мастера надстроек выбрать параметр для ее отображения в виде команды, команда по умолчанию будет размещена в меню Сервис.Однако, если во время создания надстройки этот параметр был оставлен отключенным, то можно просто запустить Мастер надстроек еще раз и установить этот параметр, а затем скопировать существующий код в новую надстройку.
Если сделать это не представляется возможным, то следующая процедура позволит добиться такого же результата.
Примечание |
---|
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Эти процедуры были разработаны с обычными параметрами разработки.Чтобы изменить настройки, в меню Сервис выберите команду Импорт и экспортпараметров.Дополнительные сведения см. в разделе Параметры Visual Studio. |
Чтобы добавить команду меню в существующую надстройку
Включите в файл, содержащий код класса Connect, приведенные ниже выражения с оператором using.
using Microsoft.VisualStudio.CommandBars; using System.Resources; using System.Reflection; using System.Globalization; using System.Windows.Forms;
Измените объявление класса Connect, чтобы реализовать IDTCommandTarget.
Замените или перепишите код процедуры OnConnection() следующим образом:
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; if(connectMode == ext_ConnectMode.ext_cm_UISetup) { object []contextGUIDS = new object[] { }; Commands2 commands = (Commands2)_applicationObject.Commands; string toolsMenuName; try { ResourceManager resourceManager = new ResourceManager("MyAddin1.CommandBar", Assembly.GetExecutingAssembly()); CultureInfo cultureInfo = new System.Globalization.CultureInfo (_applicationObject.LocaleID); string resourceName = String.Concat(cultureInfo. TwoLetterISOLanguageName, "Tools"); toolsMenuName = resourceManager.GetString(resourceName); } catch { toolsMenuName = "Tools"; } CommandBar menuBarCommandBar = ((CommandBars)_applicationObject.CommandBars) ["MenuBar"]; CommandBarControl toolsControl = menuBarCommandBar.Controls[toolsMenuName]; CommandBarPopup toolsPopup = (CommandBarPopup)toolsControl; try { Command command = commands.AddNamedCommand2 (_addInInstance, "MyAddin1", "MyAddin1", "Executes the command for MyAddin1", true, 59, ref contextGUIDS, (int)vsCommandStatus. vsCommandStatusSupported+(int)vsCommandStatus. vsCommandStatusEnabled, (int)vsCommandStyle. vsCommandStylePictAndText, vsCommandControlType. vsCommandControlTypeButton); if((command != null) && (toolsPopup != null)) { command.AddControl(toolsPopup.CommandBar, 1); } } catch(System.ArgumentException) { } } }
Добавьте две следующие обязательные роцедуры QueryStatus и Exec:
public void QueryStatus(string commandName, vsCommandStatusTextWanted neededText, ref vsCommandStatus status, ref object commandText) { if(neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone) { if(commandName == "MyAddin1.Connect.MyAddin1") { status = (vsCommandStatus)vsCommandStatus. vsCommandStatusSupported|vsCommandStatus. vsCommandStatusEnabled; return; } } } public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled) { handled = false; if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault) { if(commandName == "MyAddin1.Connect.MyAddin1") { handled = true; System.Windows.Forms.MessageBox. Show("add-in running."); return; } } }
Каждый раз при реализации IDTCommandTarget необходимо добавлять эти две процедуры.Это можно сделать быстро, выбрав IDTCommandTarget в раскрывающемся списке Имя класса в левом верхнем углу редактора.Выберите каждую процедуру по порядку из раскрывающегося списка Имя метода в правом верхнем углу.Этим создаются необходимые пустые процедуры с правильными параметрами, к которым затем можно добавить код.
Процедура Exec вызывается при выборе пользователем команды меню, поэтому код необходимо вставить в то местоположение, в котором он должен будет выполнен в тот момент.
См. также
Задачи
Практическое руководство. Вывод надстройки в меню "Сервис" (Visual Basic)
Практическое руководство. Управление надстройками с помощью диспетчера надстроек
Практическое руководство. Создание надстройки