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


Практическое руководство. Вывод надстройки в контекстном меню

Наряду с тем, что модель автоматизации Visual Studio упрощает размещение команд надстроек в меню верхнего уровня, таком как меню Сервис, команды можно также добавить в контекстные меню и подменю.

Однако в этом случае необходимо использовать модель объекта панели команд Microsoft Visual Studio для явного определения целевого контекстного меню и подменю.Затем необходимо вызвать метод Visual Studio AddControl.

Контекстные меню похожи на другие меню в Visual Studio. Чтобы открыть их, необходимо навести указатель на значок стрелки в раскрывающемся меню или щелкнуть правой кнопкой мыши элемент в интегрированной среде разработки (IDE).

Чтобы добавить команду в контекстное меню (или любое меню/панель инструментов), сначала необходимо знать имя команды.Найти имя команды можно, просмотрев узел Клавиатура в диалоговом окне Параметры меню Сервис.

Следующая процедура демонстрирует, как добавить команду надстройки в контекстное меню Списка задач.

ПримечаниеПримечание

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

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

  1. В меню Файл последовательно выберите пункты Создать и Проект.

  2. В диалоговом окне Новый проект разверните Другие типы проектов, щелкните Расширение среды, а затем в области Шаблоны выберите Надстройка Visual Studio.

    Назовите надстройку ContextCmd и нажмите кнопку “ОК” для запуска Мастера надстроек Visual Studio.

  3. Выберите параметр для создания пользовательского интерфейса для надстройки, установив флажок Создать интерфейс панели команд для надстройки?.

    В метод OnConnection будет добавлен код пользовательского интерфейса.Также будет добавлен метод Exec, обрабатывающий событие при выборе пользователем команды надстройки, и метод QueryStatus, предоставляющий сведения о состоянии надстройки.

  4. Замените код следующим:

    Imports System
    Imports Microsoft.VisualStudio.CommandBars
    Imports Extensibility
    Imports EnvDTE
    Imports EnvDTE80
    
    Public Class Connect
    
        Implements IDTExtensibility2
        Implements IDTCommandTarget
    
        Dim _applicationObject As DTE2
        Dim _addInInstance As AddIn
    
        Dim cmdBarCtl As CommandBarControl
    
        Public Sub New()
        End Sub
    
        Public Sub OnConnection(ByVal application As Object, ByVal _
          connectMode As ext_ConnectMode, ByVal addInInst As Object, _
          ByRef custom As Array) Implements _
          IDTExtensibility2.OnConnection
            Dim cmd As Command
            Dim cmdBar As CommandBar
    
            _applicationObject = CType(application, DTE2)
            _addInInstance = CType(addInInst, AddIn)
    
            Try
                If CType(ext_ConnectMode.ext_cm_AfterStartup Or _
                  ext_ConnectMode.ext_cm_Startup, Boolean) Then
                    ' If the command does not exist, add it.
                    If cmd Is Nothing Then
                        cmd = _applicationObject.Commands. _
                          AddNamedCommand(_addInInstance, _
                          "newCmd", "newCmd", "Runs the add-in.", _
                          True, 59, Nothing, _
                          vsCommandStatus.vsCommandStatusSupported _
                          Or vsCommandStatus.vsCommandStatusEnabled)
                    End If
    
                    ' Reference the Task List shortcut menu.
                    cmdBar = CType(_applicationObject. _
                      CommandBars.Item("Task List"), _
                      Microsoft.VisualStudio.CommandBars.CommandBar)
    
                    ' Add a command to the Task List's shortcut menu.
                    cmdBarCtl = CType(cmd.AddControl(cmdBar, _
                      cmdBar.Controls.Count + 1), _
                      Microsoft.VisualStudio.CommandBars. _
                      CommandBarControl)
                    cmdBarCtl.Caption = "A New Command"
                End If
            Catch e As System.Exception
                System.Windows.Forms.MessageBox.Show(e.ToString)
            End Try
        End Sub
    
        Public Sub OnDisconnection(ByVal disconnectMode As _
          ext_DisconnectMode, ByRef custom As Array) Implements _
          IDTExtensibility2.OnDisconnection
            Try
                ' Delete the command bar control from the 
                   ' shortcut menu.
                If Not (cmdBarCtl Is Nothing) Then
                    cmdBarCtl.Delete()
                End If
            Catch e As System.Exception
                System.Windows.Forms.MessageBox.Show(e.ToString)
            End Try
        End Sub
    
        Public Sub OnAddInsUpdate(ByRef custom As Array) Implements _
          IDTExtensibility2.OnAddInsUpdate
        End Sub
    
        Public Sub OnStartupComplete(ByRef custom As Array) Implements _
          IDTExtensibility2.OnStartupComplete
        End Sub
    
        Public Sub OnBeginShutdown(ByRef custom As Array) Implements _
          IDTExtensibility2.OnBeginShutdown
        End Sub
    
        Public Sub QueryStatus(ByVal commandName As String, ByVal _
          neededText As vsCommandStatusTextWanted, ByRef status As _
          vsCommandStatus, ByRef commandText As Object) Implements _
          IDTCommandTarget.QueryStatus
            If commandName = "ContextCmd.Connect.newCmd" Then
                status = CType(vsCommandStatus.vsCommandStatusEnabled _
                  + vsCommandStatus.vsCommandStatusSupported, _
                  vsCommandStatus)
            Else
                status = vsCommandStatus.vsCommandStatusUnsupported
            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 = "ContextCmd.Connect.newCmd" Then
                    handled = True
                    System.Windows.Forms.MessageBox.Show("Add-in _
                      running...")
                End If
            End If
        End Sub
    End Class
    
  5. Добавьте код, который должен выполняться при выборе команды в процедуре Exec.

  6. Постройте надстройку и запустите ее.

  7. Откройте окно Список задач, выбрав в меню Вид пункт Список задач.

  8. В меню Сервис выберите пункт Диспетчер надстроек.

  9. Активируйте надстройку ContextCmd, установив флажок рядом с ней в Диспетчере надстроек.

  10. Щелкните правой кнопкой мыши Список задач.

    Команда надстройки ContextCmd появится в контекстном меню.

См. также

Задачи

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

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

Пошаговое руководство. Создание мастера

Ссылки

Команды и переключатели Visual Studio

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

Отображение надстроек в панелях инструментов и меню

Регистрация надстройки

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

Другие ресурсы

Создание надстроек и мастеров