Практическое руководство. Вывод надстройки в контекстном меню
Наряду с тем, что модель автоматизации Visual Studio упрощает размещение команд надстроек в меню верхнего уровня, таком как меню Сервис, команды можно также добавить в контекстные меню и подменю.
Однако в этом случае необходимо использовать модель объекта панели команд Microsoft Visual Studio для явного определения целевого контекстного меню и подменю.Затем необходимо вызвать метод Visual Studio AddControl.
Контекстные меню похожи на другие меню в Visual Studio. Чтобы открыть их, необходимо навести указатель на значок стрелки в раскрывающемся меню или щелкнуть правой кнопкой мыши элемент в интегрированной среде разработки (IDE).
Чтобы добавить команду в контекстное меню (или любое меню/панель инструментов), сначала необходимо знать имя команды.Найти имя команды можно, просмотрев узел Клавиатура в диалоговом окне Параметры меню Сервис.
Следующая процедура демонстрирует, как добавить команду надстройки в контекстное меню Списка задач.
Примечание |
---|
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Эти процедуры были разработаны с обычными параметрами разработки.Чтобы изменить настройки, в меню Сервис выберите команду Импорт и экспортпараметров.Дополнительные сведения см. в разделе Параметры Visual Studio. |
Чтобы добавить команду надстройки в контекстное меню
В меню Файл последовательно выберите пункты Создать и Проект.
В диалоговом окне Новый проект разверните Другие типы проектов, щелкните Расширение среды, а затем в области Шаблоны выберите Надстройка Visual Studio.
Назовите надстройку ContextCmd и нажмите кнопку “ОК” для запуска Мастера надстроек Visual Studio.
Выберите параметр для создания пользовательского интерфейса для надстройки, установив флажок Создать интерфейс панели команд для надстройки?.
В метод OnConnection будет добавлен код пользовательского интерфейса.Также будет добавлен метод Exec, обрабатывающий событие при выборе пользователем команды надстройки, и метод QueryStatus, предоставляющий сведения о состоянии надстройки.
Замените код следующим:
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
Добавьте код, который должен выполняться при выборе команды в процедуре Exec.
Постройте надстройку и запустите ее.
Откройте окно Список задач, выбрав в меню Вид пункт Список задач.
В меню Сервис выберите пункт Диспетчер надстроек.
Активируйте надстройку ContextCmd, установив флажок рядом с ней в Диспетчере надстроек.
Щелкните правой кнопкой мыши Список задач.
Команда надстройки ContextCmd появится в контекстном меню.
См. также
Задачи
Практическое руководство. Управление надстройками с помощью диспетчера надстроек
Практическое руководство. Создание надстройки
Пошаговое руководство. Создание мастера
Ссылки
Команды и переключатели Visual Studio
Основные понятия
Отображение надстроек в панелях инструментов и меню
Диаграмма модели объектов автоматизации