Практическое руководство. Вывод надстройки в меню "Сервис" (Visual Basic)
Если при создании надстройки с помощью Мастера надстроек выбрать параметр для ее отображения в виде команды, команда по умолчанию будет размещена в меню Сервис.Однако, если во время создания надстройки этот параметр был оставлен отключенным, то можно просто запустить Мастер надстроек еще раз и установить этот параметр, а затем скопировать существующий код в новую надстройку.
Если сделать это таким образом не представляется возможным, то следующая процедура поможет решить проблему.
Примечание |
---|
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Эти процедуры были разработаны с обычными параметрами разработки.Чтобы изменить настройки, в меню Сервис выберите команду Импорт и экспортпараметров.Дополнительные сведения см. в разделе Параметры Visual Studio. |
Чтобы добавить команду меню в существующую надстройку
В класс Connect надстройки добавьте Implements IDTCommandTarget.
Это позволит получить доступ к интерфейсу команд IDTCommandTarget, который требуется для создания команд.
В процедуру OnConnection добавьте следующий код:
Imports System Imports Microsoft.VisualStudio.CommandBars Imports Extensibility Imports EnvDTE Imports EnvDTE80 _applicationObject = CType(application, DTE2) _addInInstance = CType(addInInst, AddIn) If connectMode = ext_ConnectMode.ext_cm_Startup Then Dim commands As Commands2 = CType(_applicationObject.Commands, _ Commands2) Dim toolsMenuName As String Try Dim resourceManager As System.Resources.ResourceManager = _ New System.Resources.ResourceManager _ ("MyAddin1.CommandBar", System.Reflection.Assembly. _ GetExecutingAssembly()) Dim cultureInfo As System.Globalization.CultureInfo = New _ System.Globalization.CultureInfo(_applicationObject. _ LocaleID) toolsMenuName = resourceManager.GetString(String.Concat _ (cultureInfo.TwoLetterISOLanguageName, "Tools")) Catch e As Exception toolsMenuName = "Tools" End Try Dim commandBars As CommandBars = _ CType(_applicationObject.CommandBars, CommandBars) Dim menuBarCommandBar As CommandBar = _ commandBars.Item("MenuBar") Dim toolsControl As CommandBarControl = _ menuBarCommandBar.Controls.Item(toolsMenuName) Dim toolsPopup As CommandBarPopup = CType(toolsControl, _ CommandBarPopup) Try Dim command As Command = _ commands.AddNamedCommand2(_addInInstance, "MyAddin1", _ "MyAddin1", "Executes the command for MyAddin1", True, _ 59, Nothing, CType(vsCommandStatus. _ vsCommandStatusSupported, Integer) + _ CType(vsCommandStatus.vsCommandStatusEnabled, _ Integer), vsCommandStyle.vsCommandStylePictAndText, _ vsCommandControlType.vsCommandControlTypeButton) command.AddControl(toolsPopup.CommandBar, 1) Catch argumentException As System.ArgumentException End Try End If
Этот код выполняется при загрузке ("подключении") надстройки в Visual Studio.Он определяет, была ли загружена надстройка со значением ext_ConnectMode равным ext_cm_UISetup.Это означает, что надстройка была запущена в первый раз с момента ее установки.Если значение равно "true", то для надстройки создается команда в меню Сервис при помощи метода AddNamedCommand.Дополнительные сведения см. в разделе Практическое руководство. Добавление и обработка команд.
Добавьте следующие две процедуры в класс Connect.
Метод QueryStatus вызывается при обновлении доступности команды.Метод Exec вызывается при вызове команды.
Public Sub QueryStatus(ByVal commandName As String, _ ByVal neededText As vsCommandStatusTextWanted, ByRef status As _ vsCommandStatus, ByRef commandText As Object) Implements _ IDTCommandTarget.QueryStatus If neededText = vsCommandStatusTextWanted. _ vsCommandStatusTextWantedNone Then If commandName = "MyAddin1.Connect.MyAddin1" Then status = CType(vsCommandStatus.vsCommandStatusEnabled _ + vsCommandStatus.vsCommandStatusSupported, _ vsCommandStatus) Else status = vsCommandStatus.vsCommandStatusUnsupported End If End If End Sub Public Sub Exec(ByVal commandName As String, ByVal executeOption _ As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As _ Object, ByRef handled As Boolean) Implements IDTCommandTarget.Exec handled = False If executeOption = vsCommandExecOption. _ vsCommandExecOptionDoDefault Then If commandName = "MyAddin1.Connect.MyAddin1" Then handled = True Exit Sub End If End If End Sub
Каждый раз при реализации IDTCommandTarget необходимо добавлять эти две процедуры.Это можно сделать быстро, выбрав IDTCommandTarget в раскрывающемся списке Имя класса в левом верхнем углу редактора.Выберите каждую процедуру по порядку из раскрывающегося списка Имя метода в правом верхнем углу.Этим создаются необходимые пустые процедуры с правильными параметрами, к которым затем можно добавить код.
Процедура Exec вызывается при выборе пользователем команды меню, поэтому код необходимо вставить в то местоположение, в котором он должен будет выполнен в тот момент.
См. также
Задачи
Практическое руководство. Вывод надстройки в меню "Сервис" (Visual C#)
Практическое руководство. Управление надстройками с помощью диспетчера надстроек
Практическое руководство. Создание надстройки