Comment : conserver les combinaisons de touches de commande existantes

Mise à jour : novembre 2007

Normalement, lorsque vous modifiez la combinaison de touches d'une commande, les combinaisons de touches existantes sont perdues. Toutefois, l'exemple suivant montre comment lier deux nouvelles combinaisons de touches à une commande tout en conservant les combinaisons existantes.

Si vous souhaitez consulter une liste actuelle des commandes, exécutez l'exemple ListKeyBindings présenté dans la rubrique Comment : afficher les combinaisons de touches existantes.

Remarque :

Selon vos paramètres actifs ou votre édition, les boîtes de dialogue et les commandes de menu que vous voyez peuvent différer de celles qui sont décrites dans l'aide. Ces procédures ont été développées avec les paramètres de développement généraux actifs. Pour modifier vos paramètres, sélectionnez Importer et ExporterParamètres dans le menu Outils. Pour plus d'informations, consultez Paramètres Visual Studio.

Pour ajouter de nouvelles touches de raccourci en conservant les combinaisons de touches de commande existantes

  1. Utilisez l'Assistant Complément de Visual Studio pour créer un complément. Nommez le projet, puis cliquez sur OK pour démarrer l'Assistant.

    Pour plus d'informations sur l'utilisation de l'Assistant Complément Visual Studio, consultez Comment : créer un complément.

  2. Dans la page Sélectionner un langage de programmation, sélectionnez Créer un complément à l'aide de Visual C# pour exécuter l'exemple Visual C# ci-dessous ou Créer un complément à l'aide de Visual Basic pour exécuter l'exemple Visual Basic.

  3. Collez l'exemple de fonction ci-dessous dans la classe Connect du code générée par l'Assistant Complément de Visual Studio.

  4. Pour créer une copie des paramètres de clavier par défaut, naviguez jusqu'au répertoire C:\Program Files\Microsoft Visual Studio 8\Common7\IDE.

  5. Cliquez avec le bouton droit sur l'un des fichiers vsk, puis sélectionnez Copier dans le menu contextuel.

  6. Collez la copie dans le même dossier.

    La copie est nommée « Copie de <nom_du_fichier_vsk> ».

  7. Renommez le fichier copié.

  8. Pour vérifier que le nouveau fichier vsk apparaît dans la liste des configurations du clavier, cliquez sur Options dans le menu Outils de Visual Studio.

  9. Dans le volet de gauche de la boîte de dialogue Options, développez le dossier Environnement, puis sélectionnez Clavier.

    Assurez-vous que le nom du fichier vsk spécifié à l'étape 7 s'affiche dans le menu déroulant Appliquer cet autre schéma de configuration du clavier.

  10. Avant d'exécuter l'exemple de complément, assurez-vous que la configuration du clavier est (Par défaut). Pour ce faire, cliquez sur Réinitialiser dans le volet Clavier de la boîte de dialogue Options.

  11. Remplacez le <Filename.vsk> par le nom du nouveau schéma de clavier spécifié à l'étape 7 lors de l'étape prop.Value = "< Filename.vsk>" de l'exemple de complément.

  12. Appelez la fonction depuis la méthode OnConnection conformément à la description de Comment : compiler et exécuter les exemples de code du modèle objet Automation.

  13. Générez le complément.

  14. Pour exécuter le complément, cliquez sur Gestionnaire de compléments dans le menu Outils, sélectionnez le complément que vous avez créé, puis cliquez sur OK.

    La commande File.NewFile est liée à de nouvelles combinaisons de touches (CTRL+ALT+MAJ+Y et CTRL+ALT+MAJ+U), ainsi qu'aux combinaisons de touches d'origine.

Exemple

L'exemple de complément suivant montre comment lier deux nouvelles combinaisons de touches à une commande, en conservant les combinaisons de touches existantes.

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

Voir aussi

Tâches

Comment : lier une commande à une touche de raccourci unique

Comment : lier une commande à plusieurs combinaisons de touches de raccourci

Concepts

Format de paramètre de la propriété Bindings

Autres ressources

Association de touches à des commandes de complément