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


Практическое руководство. Вывод надстройки в меню “Сервис” (Visual Basic)

Обновлен: Ноябрь 2007

Если при создании надстройки с помощью Мастера надстроек выбрать параметр для ее отображения в виде команды, команда по умолчанию будет размещена в меню Сервис. Однако, если во время создания надстройки этот параметр был оставлен отключенным, то можно просто запустить Мастер надстроек еще раз и установить этот параметр, а затем скопировать существующий код в новую надстройку.

Если сделать это таким образом не представляется возможным, то следующая процедура поможет решить проблему.

ms165624.alert_note(ru-ru,VS.90).gifПримечание.

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска. Эти процедуры были разработаны с обычными параметрами разработки. Чтобы изменить настройки, в меню Сервис выберите команду Импорт и экспортпараметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Чтобы добавить команду меню в существующую надстройку

  1. В класс Connect надстройки добавьте Implements IDTCommandTarget.

    Это позволит получить доступ к интерфейсу команд IDTCommandTarget, который требуется для создания команд.

  2. В процедуру 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_UISetup 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. Дополнительные сведения см. в разделе Практическое руководство. Добавление и обработка команд.

  3. Добавьте следующие две процедуры в класс 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#)

Практическое руководство. Управление надстройками с помощью диспетчера надстроек

Практическое руководство. Создание надстройки

Основные понятия

Диаграмма модели объектов автоматизации