Compartir a través de


Cómo: Conservar los enlaces de teclado de los comandos existentes

Actualización: noviembre 2007

Normalmente, cuando se cambia el enlace de teclado de un comando, se pierden los enlaces de teclado existentes. Sin embargo, el ejemplo siguiente muestra cómo enlazar dos nuevas combinaciones de teclas a un comando y conservar los enlaces de teclado existentes.

Si desea ver una lista actual de los comandos, ejecute el ejemplo ListKeyBindings como se presenta en el tema Cómo: Ver los enlaces de teclado existentes.

Nota:

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Estos procedimientos se desarrollaron con la Configuración general de desarrollo activa. Para cambiar la configuración, elija la opción Importar y exportarconfiguraciones del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para agregar nuevas teclas de método abreviado y conservar los enlaces de teclado de los comandos existentes

  1. Utilice el Asistente para complementos de Visual Studio para crear un nuevo complemento. Asigne un nombre al proyecto y haga clic en Aceptar para iniciar el asistente.

    Para obtener más información sobre el uso del Asistente para complementos de Visual Studio, vea Cómo: Crear un complemento.

  2. En la página Seleccione un lenguaje de programación, seleccione Crear complemento utilizando Visual C# para ejecutar el ejemplo de Visual C#, que aparece a continuación, o Crear un complemento utilizando Visual Basic para ejecutar el ejemplo de Visual Basic.

  3. Pegue la función de ejemplo que aparece a continuación en la clase Connect del código generado por el Asistente para complementos de Visual Studio.

  4. Para crear una copia de la configuración predeterminada de teclado, navegue a C:\Archivos de programa\Microsoft Visual Studio 8\Common7\IDE.

  5. Haga clic con el botón secundario del mouse en uno de los archivos vsk y seleccione Copiar en el menú de acceso directo.

  6. Pegue la copia en la misma carpeta.

    La copia se denomina "Copia de <nombre del archivo vsk>".

  7. Cambie el nombre del archivo copiado.

  8. Para comprobar que el nuevo archivo vsk aparece en la lista de enlaces del teclado, en Visual Studio, haga clic en el comando Opciones del menú Herramientas.

  9. En el panel izquierdo del cuadro de diálogo Opciones, expanda la carpeta Entorno y seleccione Teclado.

    Asegúrese de que el nombre del archivo .vsk que especificó en el paso 7 aparezca en el menú desplegable Aplicar el siguiente esquema de asignación de teclado adicional.

  10. Antes de ejecutar el ejemplo del complemento, asegúrese de que los enlaces de teclado se establezcan en (Predeterminado). Para hacer esto, haga clic en Restablecer en el panel Teclado del cuadro de diálogo Opciones.

  11. En el paso prop.Value = "< Filename.vsk>" del ejemplo de complemento, reemplace <Filename.vsk> por el nuevo nombre de la combinación de teclado que especificó en el paso 7.

  12. Llame a la función desde el método OnConnection como se describe en Cómo: Compilar y ejecutar los ejemplos de código del modelo de objetos de automatización.

  13. Genere el complemento.

  14. Para ejecutar el complemento, haga clic en Administrador de complementos del menú Herramientas, seleccione el complemento creado y haga clic en Aceptar.

    El comando File.NewFile se enlaza a los nuevos enlaces de teclado (CTRL+ALT+MAYÚS+Y y CTRL+ALT+MAYÚS+U), así como también a los enlaces de teclado originales.

Ejemplo

En el ejemplo de complemento siguiente se muestra cómo enlazar dos nuevas combinaciones de teclas a un comando y conservar los enlaces de teclado existentes.

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; 
}

Vea también

Tareas

Cómo: Enlazar un comando a una única tecla de método abreviado

Cómo: Enlazar un comando a varias combinaciones de teclas de método abreviado

Conceptos

Formato de los parámetros de la propiedad Bindings

Otros recursos

Enlazar comandos de complementos a teclas