Практическое руководство. Добавление и обработка команд
Следующие объекты позволяют создавать, обрабатывать и изменять команды в меню и на панелях инструментов Visual Studio.
Имя объекта |
Описание |
---|---|
Предоставляет методы, позволяющие определить состояние или выполнить команду, добавленную в интегрированную среду разработки с помощью метода AddNamedCommand2. |
|
Представляет все команды в интегрированной среде разработки. |
|
Представляет команду в интегрированной среде разработки. |
|
Предоставляет события команд для надстроек. |
|
Предоставляет событие Click, возникающее при щелчке элемента управления в панели команд. |
Примечание |
---|
Если добавленная команда больше не появляется на соответствующей панели команд, либо создана новая команда или изменена существующая, либо необходимо создать команду заново, следует закрыть все экземпляры Visual Studio и дважды щелкнуть мышью файл ReCreateCommands.reg в папке, содержащей исходный код разработанной надстройки. |
Использование этих объектов дает следующие возможности:
Добавление или удаление панели команд в интегрированной среде разработки Visual Studio (методы AddCommandBar и RemoveCommandBar).
Добавление новой именованной команды на панель элементов или в меню (метод AddNamedCommand2).
Вызов команды или именованной команды (методы Raise и Exec).
Получение состояния команды (методы CommandInfo и QueryStatus).
Примечание Невозможно связать событие CommandBarEvents с элементами управления AddNamedCommand2, созданными для новых команд, добавленных с помощью
Примечание |
---|
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Эти процедуры были разработаны с обычными параметрами разработки.Чтобы изменить настройки, в меню Сервис выберите команду Импорт и экспортпараметров.Дополнительные сведения см. в разделе Параметры Visual Studio. |
Пример
В следующем примере используется:
Объект Command.
Метод AddNamedCommand.
Метод AddControl.
Интерфейс IDTCommandTarget.
Метод IDTCommandTarget.Exec.
Метод IDTCommandTarget.QueryStatus.
Следующая процедура демонстрирует, как отобразить надстройку в виде команды в меню Сервис в Visual Studio.Добавьте первый раздел кода в метод OnConnection созданной надстройки.В методах Exec и QueryStatus убедитесь, что строка If cmdName = "MyAddin1.Connect.MyAddin1" Then отражает имя надстройки.
Public Sub OnConnection(ByVal application As Object, _
ByVal connectMode As ext_ConnectMode, ByVal addInInst _
As Object, ByRef custom As Array) Implements _
IDTExtensibility2.OnConnection
_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
MsgBox(argumentException.ToString)
End Try
End If
End Sub
'Code for the QueryStatus method.
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
' Code for the Exec method.
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
public class Connect : Object, IDTExtensibility2, IDTCommandTarget
{
public Connect()
{
}
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("MyAddin4.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,
"MyAddin4", "MyAddin4", "Executes the command for
MyAddin4", 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)
{
}
}
}
public void QueryStatus(string commandName, vsCommandStatusTextWanted
neededText, ref vsCommandStatus status, ref object commandText)
{
if(neededText ==
vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
{
if(commandName == "MyAddin4.Connect.MyAddin4")
{
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 == "MyAddin4.Connect.MyAddin4")
{
handled = true;
return;
}
}
}
См. также
Задачи
Практическое руководство. Создание надстройки
Пошаговое руководство. Создание мастера
Основные понятия
Управление проектами и решениями
Диаграмма модели объектов автоматизации