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


Практическое руководство. Сохранение существующих сочетаний клавиш

Надстройки Visual Studio выступан сопоставления в Visual Studio 2013. Необходимо обновить для надстройки с расширениями VSPackage. Дополнительные сведения об обновлении см. в разделе Часто задаваемые вопросы. Преобразование надстроек в расширения VSPackage.

При изменении сочетания клавиш для определенной команды существующее сочетание обычно удаляется. Приведенный ниже пример демонстрирует способ привязки двух новых сочетаний клавиш к команде и сохранения существующих.

Чтобы просмотреть текущий список команд и их сочетаний клавиш, запустите пример ListKeyBindings, представленный в разделе Практическое руководство. Просмотр существующих привязок к клавишам.

Примечание

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

Добавление новых сочетаний клавиш и сохранение существующих

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

    Дополнительные сведения об использовании Мастера надстроек Visual Studio см. в разделе Практическое руководство. Создание надстройки.

  2. На странице Выбрать язык программирования выберите Создать надстройку, используя Visual C# для запуска следующего примера Visual C# или Создать надстройку, используя Visual Basic для запуска примера Visual Basic.

  3. Вставьте следующий пример функции (приведен ниже в этом разделе) в класс Connect кода, созданного Мастером надстроек Visual Studio.

  4. Чтобы создать копию параметров клавиатуры по умолчанию, перейдите в каталог C:\Program Files\Microsoft Visual Studio 10\Common7\IDE.

  5. Щелкните правой кнопкой мыши один из файлов VSK и выберите команду Копировать.

  6. Вставьте копию в ту же папку и переименуйте ее.

  7. Чтобы удостовериться в том, что VSK-файл появился в списке сочетаний клавиш, откройте Visual Studio и выберите в меню Сервис команду Параметры.

  8. В левой области диалогового окна Параметры разверните папку Среда и выберите Клавиатура.

    Убедитесь в том, что имя указанного ранее VSK-файла появилось в списке Применить следующую дополнительную схему назначений клавиш.

  9. Перед запуском примера надстройки убедитесь, что сочетания клавиш имеют значение**(По умолчанию)**. Для этого нажмите кнопку Сброс на панели Клавиатура в диалоговом окне Параметры.

  10. На шаге prop.Value = "<Filename.vsk>" примера надстройки замените <Filename.vsk> именем VSK-файла, указанного ранее.

  11. Вызовите функцию из метода OnConnection, как описано в разделе Практическое руководство. Компиляция и выполнение примеров кода модели объектов автоматизации.

  12. Выполните построение надстройки.

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

    Команда File.NewFile будет привязана к новым сочетаниям клавиш (CTRL+ALT+SHIFT+Y и CTRL+ALT+SHIFT+U), а также к исходным сочетаниям.

Пример

Приведенный ниже пример надстройки иллюстрирует способ привязки двух новых сочетаний клавиш к команде и сохранения существующих.

Sub PreserveBindings()
    ' Adds two new key bindings while preserving the existing ones.
    Dim cmds As Commands
    Dim cmd As Command
    Dim props As EnvDTE.Properties = DTE.Properties("Environment", _
    "Keyboard")
    Dim prop As EnvDTE.Property
    Dim bindings() As Object
    Dim bindingNumber As Integer

    ' Set references to the Commands collection and the File.NewFile
    ' command.
    cmds = DTE.Commands
    cmd = cmds.Item("File.NewFile")
    ' Make a writeable copy of the default keymapping scheme.
    prop = props.Item("SchemeName")
    prop.Value = "<FileName.vsk>"
    ' Retrieve the current bindings for the command.
    bindings = cmd.Bindings
    ' Get the number of bindings for the command.
    bindingNumber = bindings.Length
    ' Add two more elements to the array to accomodate two
    ' new commands.
    ReDim Preserve bindings(bindingNumber + 1)
    ' Add the new bindings to the existing ones in the array.
    bindings(bindingNumber) = "Global::CTRL+ALT+SHIFT+Y"
    bindings(bindingNumber + 1) = "Global::CTRL+ALT+SHIFT+U"
    ' Assign the contents of the bindings array to the Bindings 
    ' property.
    cmd.Bindings = bindings
End Sub
public void OnConnection(object application,
 Extensibility.ext_ConnectMode connectMode, object addInInst, ref
 System.Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    // Pass the applicationObject member variable to the code example.
    PreserveBindings((_applicationObject); 
}

// Add-in example for TextSelection.FindPattern.
// Also shows usage of these methods and properties:
//    TextSelection.SelectLine
public void PreserveBindings( DTE dte ) 
{ 
    // Adds two new key bindings while preserving the existing ones.
    Commands cmds = null; 
    Command cmd = null; 
    EnvDTE.Properties props = dte.get_Properties( "Environment",
 "Keyboard"); 
    EnvDTE.Property prop = null; 
    Object[] bindings = null; 
    int bindingNumber = 0; 

    //  Set references to the Commands collection and the File.NewFile
    //  command.
    cmds = dte.Commands; 
    cmd = cmds.Item( "File.NewFile", -1 ); 
    // Make a writeable copy of the default keymapping scheme.
    prop = props.Item( "SchemeName" ); 
    prop.Value = "<FileName.vsk>"; 
    // Retrieve the current bindings for the command.
    bindings = ( ( System.Object[] )( cmd.Bindings ) ); 
    // Get the number of bindings for the command.
    bindingNumber = bindings.Length; 
    // Add two more elements to the array to accomodate two
    // new commands.
    // Create temp variable for copying values. 
    // Arrays are zero-based in C#.
    object[] temp = new object[ bindingNumber + 2 ]; 
    System.Array.Copy( bindings, temp, Math.Min( bindings.Length,
 temp.Length ) ); 
    bindings = temp; 
    // Add the new bindings to the existing ones in the array.
    bindings[ bindingNumber ] = "Global::CTRL+ALT+SHIFT+Y"; 
    bindings[ bindingNumber+1 ] = "Global::CTRL+ALT+SHIFT+U"; 
    // Assign the contents of the bindings array to the Bindings 
    // property.
    cmd.Bindings = bindings; 
}

См. также

Задачи

Практическое руководство. Привязка команды к одному сочетанию клавиш

Практическое руководство. Привязка команды к нескольким сочетаниям клавиш

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

Формат параметров свойства привязки

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

Привязка команды управления надстройкой к клавишам