Partager via


Créer des groupes réutilisables de boutons

Un groupe de commandes est une collection de commandes qui apparaissent toujours ensemble dans un menu ou une barre d’outils. Tout groupe de commandes peut être réutilisé en l’affectant à différents menus parents dans la section CommandPlacements du fichier .vsct .

Les groupes de commandes contiennent généralement des boutons, mais ils peuvent également contenir d’autres menus ou zones de liste modifiable.

Pour créer un groupe réutilisable de boutons

  1. Créez un projet VSIX nommé ReusableButtons. Pour plus d’informations, consultez Créer une extension avec une commande de menu.

  2. Lorsque le projet s’ouvre, ajoutez un modèle d’élément de commande personnalisé nommé ReusableCommand. Dans le Explorateur de solutions, cliquez avec le bouton droit sur le nœud du projet, puis sélectionnez Ajouter>un nouvel élément. Dans la boîte de dialogue Ajouter un nouvel élément, accédez à Visual C#>Extensibilité et sélectionnez Commande personnalisée. Dans le champ Nom en bas de la fenêtre, remplacez le nom du fichier de commande par ReusableCommand.cs.

  3. Dans le fichier .vsct , accédez à la section Symboles et recherchez l’élément GuidSymbol qui contient des groupes et des commandes pour le projet. Il doit être nommé guidReusableCommandPackageCmdSet.

  4. Ajoutez un IDSymbol pour chaque bouton que vous allez ajouter au groupe, comme dans l’exemple suivant.

    <GuidSymbol name="guidReusableCommandPackageCmdSet" value="{7f383b2a-c6b9-4c1d-b4b8-a26dc5b60ca1}">
        <IDSymbol name="MyMenuGroup" value="0x1020" />
        <IDSymbol name="ReusableCommandId" value="0x0100" />
        <IDSymbol name="SecondReusableCommandId" value="0x0200" />
    </GuidSymbol>
    

    Par défaut, le modèle d’élément de commande crée un groupe nommé MyMenuGroup et un bouton portant le nom que vous avez fourni, ainsi qu’une entrée IDSymbol pour chacun d’eux.

  5. Dans la section Groups, créez un élément Group qui a les mêmes attributs GUID et ID que ceux indiqués dans la section Symboles. Vous pouvez également utiliser un groupe existant ou utiliser l’entrée fournie par le modèle de commande, comme dans l’exemple suivant. Ce groupe apparaît dans le menu Outils

    <Groups>
        <Group guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" priority="0x0600">
              <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
        </Group>
    </Groups>
    

Pour créer un groupe de boutons à réutiliser

  1. Vous pouvez placer une commande ou un menu dans un groupe à l’aide du groupe en tant que parent dans la définition de la commande ou du menu, ou en plaçant la commande ou le menu dans le groupe à l’aide de la section CommandPlacements.

    Dans la section Boutons, définissez un bouton qui a votre groupe comme parent, ou utilisez le bouton fourni par le modèle de package, comme illustré dans l’exemple suivant.

    <Button guid="guidReusableCommandPackageCmdSet" id="ReusableCommandId" priority="0x0100" type="Button">
        <Parent guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" />
        <Icon guid="guidImages" id="bmpPic1" />
        <Strings>
            <ButtonText>Invoke ReusableCommand</ButtonText>
        </Strings>
    </Button>
    
  2. Si un bouton doit apparaître dans plusieurs groupes, créez une entrée pour celle-ci dans la section CommandPlacements, qui doit être placée après la section Commandes. Définissez les attributs GUID et ID de l’élément CommandPlacement pour qu’ils correspondent à ceux du bouton que vous souhaitez positionner, puis définissez le GUID et l’ID de son élément Parent sur ceux du groupe cible, comme illustré dans l’exemple suivant.

    <CommandPlacements>
        <CommandPlacement guid="guidReusableCommandPackageCmdSet" id="SecondReusableCommandId" priority="0x105">
          <Parent guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" />
        </CommandPlacement>
    </CommandPlacements>
    

    Remarque

    La valeur du champ Priorité détermine la position de la commande dans le nouveau groupe de commandes. Les priorités définies dans l’élément CommandPlacement remplacent celles définies dans la définition d’élément. Les commandes qui ont des valeurs de priorité inférieure sont affichées avant les commandes qui ont des valeurs de priorité supérieures. Les valeurs de priorité dupliquées sont autorisées, mais la position relative des commandes qui ont la même valeur de priorité ne peut pas être garantie, car l’ordre dans lequel la commande devenv /setup crée l’interface finale à partir du Registre peut ne pas être cohérente.

Pour placer un groupe réutilisable de boutons dans un menu

  1. Créez une entrée dans la CommandPlacements section. Définissez le GUID et l’ID de l’élément CommandPlacement sur ceux de votre groupe, puis définissez le GUID parent et l’ID sur ceux de l’emplacement cible.

    La section CommandPlacements doit être placée juste après la section Commandes :

    <CommandTable>
    ...
      <Commands>... </Commands>
      <CommandPlacements>... </CommandPlacements>
    ...
    </CommandTable>
    

    Un groupe de commandes peut être inclus dans plusieurs menus. Le menu parent peut être celui que vous avez créé, celui fourni par Visual Studio (comme décrit dans ShellCmdDef.vsct ou SharedCmdDef.vsct), ou un qui est défini dans un autre VSPackage. Le nombre de couches parentes est illimité tant que le menu parent est finalement connecté à Visual Studio ou à un menu contextuel affiché par un VSPackage.

    L’exemple suivant place le groupe dans la barre d’outils Explorateur de solutions, à droite des autres boutons.

    <CommandPlacements>
        <CommandPlacement guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" priority="0xF00">
          <Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_PROJWIN"/>
        </CommandPlacement>
    </CommandPlacements>
    
    <CommandPlacements>
      <CommandPlacement guid="guidButtonGroupCmdSet" id="MyMenuGroup"
          priority="0x605">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS" />
      </CommandPlacement>
    </CommandPlacements>