Partager via


Ajouter une liste la plus récente utilisée à un sous-menu

Cette procédure pas à pas s’appuie sur les démonstrations dans Ajouter un sous-menu à un menu et montre comment ajouter une liste dynamique à un sous-menu. La liste dynamique constitue la base de la création d’une liste MRU (Most Recently Used).

Une liste de menus dynamiques commence par un espace réservé dans un menu. Chaque fois que le menu s’affiche, l’environnement de développement intégré Visual Studio (IDE) demande à VSPackage toutes les commandes qui doivent être affichées à l’espace réservé. Une liste dynamique peut se produire n’importe où dans un menu. Toutefois, les listes dynamiques sont généralement stockées et affichées par eux-mêmes sur les sous-menus ou au bas des menus. En utilisant ces modèles de conception, vous activez la liste dynamique des commandes à développer et à contracter sans affecter la position d’autres commandes dans le menu. Dans cette procédure pas à pas, la liste mrU dynamique s’affiche en bas d’un sous-menu existant, séparé du reste du sous-menu par une ligne.

Techniquement, une liste dynamique peut également être appliquée à une barre d’outils. Toutefois, nous déconseillons cette utilisation, car une barre d’outils doit rester inchangée, sauf si l’utilisateur prend des mesures spécifiques pour le modifier.

Cette procédure pas à pas crée une liste de quatre éléments qui modifient leur ordre chaque fois que l’un d’eux est sélectionné (l’élément sélectionné se déplace en haut de la liste).

Pour plus d’informations sur les menus et les fichiers .vsct , consultez Commandes, menus et barres d’outils.

Prérequis

Pour suivre cette procédure pas à pas, vous devez installer le Kit de développement logiciel (SDK) Visual Studio. Pour plus d'informations, consultez SDK Visual Studio.

Créer une extension

  • Suivez les procédures de l’ajout d’un sous-menu à un menu pour créer le sous-menu modifié dans les procédures suivantes.

    Les procédures décrites dans cette procédure pas à pas supposent que le nom du VSPackage est TestCommand, qui est le nom utilisé dans Ajouter un menu à la barre de menus de Visual Studio.

Créer une commande de liste d’éléments dynamiques

  1. Ouvrez TestCommandPackage.vsct.

  2. Dans la Symbols section, dans le GuidSymbol nœud nommé guidTestCommandPackageCmdSet, ajoutez le symbole du groupe et de la MRUListGroup cmdidMRUList commande, comme suit.

    <IDSymbol name="MRUListGroup" value="0x1200"/>
    <IDSymbol name="cmdidMRUList" value="0x0200"/>
    
  3. Dans la Groups section, ajoutez le groupe déclaré après les entrées de groupe existantes.

    <Group guid="guidTestCommandPackageCmdSet" id="MRUListGroup"
            priority="0x0100">
        <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/>
    </Group>
    
  4. Dans la Buttons section, ajoutez un nœud pour représenter la commande nouvellement déclarée, après les entrées de bouton existantes.

    <Button guid="guidTestCommandPackageCmdSet" id="cmdidMRUList"
        type="Button" priority="0x0100">
        <Parent guid="guidTestCommandPackageCmdSet" id="MRUListGroup" />
        <CommandFlag>DynamicItemStart</CommandFlag>
        <Strings>
            <CommandName>cmdidMRUList</CommandName>
            <ButtonText>MRU Placeholder</ButtonText>
        </Strings>
    </Button>
    

    L’indicateur DynamicItemStart permet à la commande d’être générée dynamiquement.

  5. Générez le projet et démarrez le débogage pour tester l’affichage de la nouvelle commande.

    Dans le menu TestMenu , cliquez sur le nouveau sous-menu, sous-menu, pour afficher la nouvelle commande, espace réservé MRU. Une fois qu’une liste dynamique de commandes est implémentée dans la procédure suivante, cette étiquette de commande est remplacée par cette liste chaque fois que le sous-menu est ouvert.

Remplissage de la liste mrU

  1. Dans TestCommandPackageGuids.cs, ajoutez les lignes suivantes après les ID de commande existants dans la définition de TestCommandPackageGuids classe.

    public const string guidTestCommandPackageCmdSet = "00000000-0000-0000-0000-00000000"; // get the GUID from the .vsct file
    public const uint cmdidMRUList = 0x200;
    
  2. Dans TestCommand.cs , ajoutez l’instruction using suivante.

    using System.Collections;
    
  3. Ajoutez le code suivant dans le constructeur TestCommand après le dernier appel AddCommand. Le InitMRUMenu sera défini ultérieurement

    this.InitMRUMenu(commandService);
    
  4. Ajoutez le code suivant dans la classe TestCommand. Ce code initialise la liste des chaînes qui représentent les éléments à afficher dans la liste MRU.

    private int numMRUItems = 4;
    private int baseMRUID = (int)TestCommandPackageGuids.cmdidMRUList;
    private ArrayList mruList;
    
    private void InitializeMRUList()
    {
        if (null == this.mruList)
        {
            this.mruList = new ArrayList();
            if (null != this.mruList)
            {
                for (int i = 0; i < this.numMRUItems; i++)
                {
                    this.mruList.Add(string.Format(CultureInfo.CurrentCulture,
                        "Item {0}", i + 1));
                }
            }
        }
    }
    
  5. Après la InitializeMRUList méthode, ajoutez la InitMRUMenu méthode. Cette opération initialise les commandes du menu liste des mrU.

    private void InitMRUMenu(OleMenuCommandService mcs)
    {
        InitializeMRUList();
        for (int i = 0; i < this.numMRUItems; i++)
        {
            var cmdID = new CommandID(
                new Guid(TestCommandPackageGuids.guidTestCommandPackageCmdSet), this.baseMRUID + i);
            var mc = new OleMenuCommand(
                new EventHandler(OnMRUExec), cmdID);
            mc.BeforeQueryStatus += new EventHandler(OnMRUQueryStatus);
            mcs.AddCommand(mc);
        }
    }
    

    Vous devez créer un objet de commande de menu pour chaque élément possible dans la liste mrU. L’IDE appelle la OnMRUQueryStatus méthode pour chaque élément de la liste MRU jusqu’à ce qu’il n’y ait plus d’éléments. Dans le code managé, la seule façon pour l’IDE de savoir qu’il n’y a plus d’éléments consiste à créer tous les éléments possibles en premier. Si vous le souhaitez, vous pouvez marquer des éléments supplémentaires comme non visibles au début à l’aide mc.Visible = false; de la commande de menu créée. Ces éléments peuvent ensuite être rendus visibles ultérieurement à l’aide mc.Visible = true; de la OnMRUQueryStatus méthode.

  6. Après la InitMRUMenu méthode, ajoutez la méthode suivante OnMRUQueryStatus . Il s’agit du gestionnaire qui définit le texte de chaque élément MRU.

    private void OnMRUQueryStatus(object sender, EventArgs e)
    {
        OleMenuCommand menuCommand = sender as OleMenuCommand;
        if (null != menuCommand)
        {
            int MRUItemIndex = menuCommand.CommandID.ID - this.baseMRUID;
            if (MRUItemIndex >= 0 && MRUItemIndex < this.mruList.Count)
            {
                menuCommand.Text = this.mruList[MRUItemIndex] as string;
            }
        }
    }
    
  7. Après la OnMRUQueryStatus méthode, ajoutez la méthode suivante OnMRUExec . Il s’agit du gestionnaire permettant de sélectionner un élément MRU. Cette méthode déplace l’élément sélectionné en haut de la liste, puis affiche l’élément sélectionné dans une boîte de message.

    private void OnMRUExec(object sender, EventArgs e)
    {
        var menuCommand = sender as OleMenuCommand;
        if (null != menuCommand)
        {
            int MRUItemIndex = menuCommand.CommandID.ID - this.baseMRUID;
            if (MRUItemIndex >= 0 && MRUItemIndex < this.mruList.Count)
            {
                string selection = this.mruList[MRUItemIndex] as string;
                for (int i = MRUItemIndex; i > 0; i--)
                {
                    this.mruList[i] = this.mruList[i - 1];
                }
                this.mruList[0] = selection;
                System.Windows.Forms.MessageBox.Show(
                    string.Format(CultureInfo.CurrentCulture,
                                  "Selected {0}", selection));
            }
        }
    }
    

Test de la liste mrU

  1. Générez le projet et commencez le débogage.

  2. Dans le menu TestMenu , cliquez sur Appeler TestCommand. Cette opération affiche une boîte de message qui indique que la commande a été sélectionnée.

    Remarque

    Cette étape est nécessaire pour forcer le vsPackage à charger et à afficher correctement la liste mrU. Si vous ignorez cette étape, la liste mrU n’est pas affichée.

  3. Dans le menu Menu Test, cliquez sur Sous-menu. Une liste de quatre éléments s’affiche à la fin du sous-menu, sous un séparateur. Lorsque vous cliquez sur l’élément 3, une zone de message doit apparaître et afficher le texte, élément sélectionné 3. (Si la liste de quatre éléments n’est pas affichée, vérifiez que vous avez suivi les instructions de l’étape précédente.)

  4. Ouvrez à nouveau le sous-menu. Notez que l’élément 3 se trouve maintenant en haut de la liste et que les autres éléments ont été poussés vers le bas d’une position. Cliquez à nouveau sur l’élément 3 et notez que la zone de message affiche toujours l’élément sélectionné 3, ce qui indique que le texte a correctement déplacé vers la nouvelle position avec l’étiquette de commande.