Share via


Aggiungere un elenco usato più di recente a un sottomenu

Questa procedura dettagliata si basa sulle dimostrazioni in Aggiungere un sottomenu a un menu e illustra come aggiungere un elenco dinamico a un sottomenu. L'elenco dinamico costituisce la base per la creazione di un elenco di elementi usati più di recente.

Un elenco di menu dinamico inizia con un segnaposto in un menu. Ogni volta che viene visualizzato il menu, l'ambiente di sviluppo integrato (IDE) di Visual Studio chiede al pacchetto VSPackage tutti i comandi che devono essere visualizzati nel segnaposto. Un elenco dinamico può verificarsi in qualsiasi punto di un menu. Tuttavia, gli elenchi dinamici vengono in genere archiviati e visualizzati da soli in sottomenu o nella parte inferiore dei menu. Usando questi modelli di progettazione, è possibile abilitare l'elenco dinamico dei comandi per espandere e creare contratti senza influire sulla posizione di altri comandi nel menu. In questa procedura dettagliata, l'elenco dinamico mru viene visualizzato nella parte inferiore di un sottomenu esistente, separato dal resto del sottomenu da una riga.

Tecnicamente, un elenco dinamico può essere applicato anche a una barra degli strumenti. Tuttavia, sconsigliamo l'utilizzo perché una barra degli strumenti deve rimanere invariata a meno che l'utente non esegua passaggi specifici per modificarlo.

Questa procedura dettagliata crea un elenco MRU di quattro elementi che modificano l'ordine ogni volta che viene selezionata una di esse (l'elemento selezionato si sposta all'inizio dell'elenco).

Per altre informazioni sui menu e sui file con estensione vsct , vedere Comandi, menu e barre degli strumenti.

Prerequisiti

Per seguire questa procedura dettagliata, è necessario installare Visual Studio SDK. Per altre informazioni, vedere Visual Studio SDK.

Creare un'estensione

  • Seguire le procedure descritte in Aggiunta di un sottomenu a un menu per creare il sottomenu modificato nelle procedure seguenti.

    Le procedure descritte in questa procedura dettagliata presuppongono che il nome del pacchetto VSPackage sia TestCommand, ovvero il nome usato in Aggiungere un menu alla barra dei menu di Visual Studio.

Creare un comando di elenco di elementi dinamici

  1. Aprire TestCommandPackage.vsct.

  2. Symbols Nella sezione, nel GuidSymbol nodo denominato guidTestCommandPackageCmdSet, aggiungere il simbolo per il MRUListGroup gruppo e il cmdidMRUList comando, come indicato di seguito.

    <IDSymbol name="MRUListGroup" value="0x1200"/>
    <IDSymbol name="cmdidMRUList" value="0x0200"/>
    
  3. Groups Nella sezione aggiungere il gruppo dichiarato dopo le voci di gruppo esistenti.

    <Group guid="guidTestCommandPackageCmdSet" id="MRUListGroup"
            priority="0x0100">
        <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/>
    </Group>
    
  4. Buttons Nella sezione aggiungere un nodo per rappresentare il comando appena dichiarato, dopo le voci del pulsante esistenti.

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

    Il DynamicItemStart flag consente di generare dinamicamente il comando.

  5. Compilare il progetto e avviare il debug per testare la visualizzazione del nuovo comando.

    Nel menu TestMenu fare clic sul nuovo sottomenu, Sottomenu, per visualizzare il nuovo comando, segnaposto MRU. Dopo l'implementazione di un elenco DI COMANDI dinamico nella procedura successiva, questa etichetta di comando verrà sostituita da tale elenco ogni volta che viene aperto il sottomenu.

Compilazione dell'elenco MRU

  1. In TestCommandPackageGuids.cs aggiungere le righe seguenti dopo gli ID dei comandi esistenti nella definizione della TestCommandPackageGuids classe.

    public const string guidTestCommandPackageCmdSet = "00000000-0000-0000-0000-00000000"; // get the GUID from the .vsct file
    public const uint cmdidMRUList = 0x200;
    
  2. In TestCommand.cs aggiungere l'istruzione using seguente.

    using System.Collections;
    
  3. Aggiungere il codice seguente nel costruttore TestCommand dopo l'ultima chiamata addCommand. L'oggetto InitMRUMenu verrà definito in un secondo momento

    this.InitMRUMenu(commandService);
    
  4. Aggiungere il codice seguente nella classe TestCommand. Questo codice inizializza l'elenco di stringhe che rappresentano gli elementi da visualizzare nell'elenco 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. Dopo il InitializeMRUList metodo, aggiungere il InitMRUMenu metodo . Inizializza i comandi di menu elenco 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);
        }
    }
    

    È necessario creare un oggetto comando di menu per ogni elemento possibile nell'elenco MRU. L'IDE chiama il OnMRUQueryStatus metodo per ogni elemento nell'elenco MRU fino a quando non sono presenti altri elementi. Nel codice gestito, l'unico modo per sapere all'IDE che non ci sono più elementi consiste innanzitutto nel creare tutti gli elementi possibili. Se si desidera, è possibile contrassegnare elementi aggiuntivi come non visibili all'inizio usando mc.Visible = false; dopo la creazione del comando di menu. Questi elementi possono quindi essere resi visibili in un secondo momento usando mc.Visible = true; nel OnMRUQueryStatus metodo .

  6. Dopo il InitMRUMenu metodo aggiungere il metodo seguente OnMRUQueryStatus . Si tratta del gestore che imposta il testo per ogni elemento 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. Dopo il OnMRUQueryStatus metodo aggiungere il metodo seguente OnMRUExec . Questo è il gestore per la selezione di un elemento MRU. Questo metodo sposta l'elemento selezionato all'inizio dell'elenco e quindi visualizza l'elemento selezionato in una finestra di messaggio.

    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 dell'elenco MRU

  1. Compilare il progetto e avviare il debug.

  2. Scegliere Richiama TestCommand dal menu TestMenu. In questo modo viene visualizzata una finestra di messaggio che indica che il comando è stato selezionato.

    Nota

    Questo passaggio è necessario per forzare il caricamento del VSPackage e la visualizzazione corretta dell'elenco MRU. Se si ignora questo passaggio, l'elenco MRU non viene visualizzato.

  3. Scegliere Menu secondario dal menu Test. Un elenco di quattro elementi viene visualizzato alla fine del sottomenu, sotto un separatore. Quando si fa clic su Elemento 3, verrà visualizzata una finestra di messaggio e verrà visualizzato il testo Elemento selezionato 3. Se l'elenco di quattro elementi non viene visualizzato, assicurarsi di aver seguito le istruzioni nel passaggio precedente.

  4. Aprire di nuovo il sottomenu. Si noti che l'elemento 3 è ora nella parte superiore dell'elenco e gli altri elementi sono stati spostati verso il basso in una posizione. Fare di nuovo clic sull'elemento 3 e notare che nella finestra di messaggio viene ancora visualizzato l'elemento selezionato 3, che indica che il testo è stato spostato correttamente nella nuova posizione insieme all'etichetta del comando.