Partilhar via


Passo a passo: Adicionar um mais recentemente usada a lista a um Submenu

Esta explicação passo a passo se baseia nas demonstrações Passo a passo: Adicionando um Submenu a um Menue mostra como adicionar uma lista dinâmica a um submenu. A lista dinâmica constitui a base para a criação de uma lista de usados mais recentemente (MRU).

Uma lista de menu dinâmico começa com um espaço reservado em um menu. Toda vez que o menu é exibido, o Visual Studio o ambiente de desenvolvimento integrado (IDE) pede o VSPackage todos os comandos que devem ser mostrados no espaço reservado. Uma lista dinâmica pode ocorrer em qualquer lugar em um menu. No entanto, listas dinâmicas geralmente são armazenadas e exibidas por si só em submenus ou na parte inferior dos menus. Usando esses padrões de design, você deve habilitar a lista dinâmica de comandos para expandir e contrair sem afetar a posição dos outros comandos no menu. Esta explicação passo a passo, a lista MRU dinâmica é exibida na parte inferior de um submenu existente, separado do resto do submenu por uma linha.

Tecnicamente, uma lista dinâmica também pode ser aplicada a uma barra de ferramentas. No entanto, se o uso do podemos desencorajar porque uma barra de ferramentas deve permanecer inalterada, a menos que o usuário realiza as etapas específicas para alterá-lo.

Esta explicação passo a passo cria uma lista MRU de quatro itens que mudar sua ordem, toda vez que um deles é selecionado (o item selecionado se move para o topo da lista).

Para obter mais informações sobre a menus e os arquivos de .vsct, consulte Comandos, Menus e barras de ferramentas.

Pré-requisitos

Para concluir este passo a passo, você deve instalar o SDL do Visual Studio 2010.

Dica

Para obter mais informações sobre o SDK de Visual Studio, consulte Ampliando a visão geral de Visual Studio.Para descobrir como fazer o download do SDK do Visual Studio, consulte Visual Studio extensibilidade Developer Center no site do MSDN.

Locais para o modelo de projeto de pacote de Visual Studio

O modelo de projeto do pacote de Visual Studio está disponível nos três locais, o Novo projeto caixa de diálogo:

  • Em Visual Basic extensibilidade. O idioma padrão do projeto é Visual Basic.

  • Em C# extensibilidade. O idioma padrão do projeto é C#.

  • Em outra extensibilidade de tipos de projeto. O idioma padrão do projeto é C++.

Criando um VSPackage

Para criar o TopLevelMenu VSPackage

Os procedimentos nesta explicação supõem que o nome do VSPackage é TopLevelMenu, que é o nome que é usado em Passo a passo: Adicionando um Menu à barra de menus de Visual Studio (C#).

Criando um comando de lista de itens dinâmicos

Para criar um comando de lista de itens dinâmicos

  1. Abra TopLevelMenu.vsct.

  2. No Symbols seção, o GuidSymbol nó chamado guidTopLevelMenuCmdSet, adicionar o símbolo para o MRUListGroup grupo e o cmdidMRUList de comando, da seguinte maneira.

  3. No Groups seção, adicione o grupo de declarado após as entradas existentes do grupo.

  4. No Buttons seção, adicionar um nó para representar o comando recentemente declarado, após as entradas existentes do botão.

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

    O DynamicItemStart sinalizador permite que o comando a ser gerado dinamicamente.

  5. Sobre o Build menu,clique em Build Solution.

    Fazendo isso recria o arquivo de .vsct com as alterações. Corrija quaisquer erros que possam ocorrer durante a construção.

  6. Pressione F5 para testar a exibição do novo comando.

  7. Sobre o TestMenu menu, clique em novo submenu, Menu Sub, para exibir o novo comando, Espaço reservado de MRU. Após a implementação de uma lista MRU dinâmica dos comandos no próximo procedimento, o rótulo do comando será substituído por essa lista toda vez que o submenu é aberto.

    Dica

    Você deve fechar o experimental Visual Studio antes de prosseguir para a próxima seção.

Preencher a lista MRU

Para preencher a lista MRU usando código gerenciado

  1. PkgCmdID.cs ou PkgCmdID.vb no editor de código aberto.

  2. Adicione o seguinte comando ID após as IDs de comando existente na PkgCmdIDList definição de classe.

    public const uint cmdidMRUList = 0x200;
    
  3. TopLevelMenuPackage.cs ou TopLevelMenuPackage.vb no editor de código aberto.

  4. Na parte superior do arquivo, no final da lista de usar declarações, adicione a instrução a seguir.

    using System.Collections;
    
  5. Encontrar o Initialize método. Talvez você precise encontrar região oculta rotulado como "Membros do pacote" e expandi-la. O Initialize método é nesta região oculta.

  6. Para o Initialize método, adicione a seguinte linha logo após a última chamada para o AddCommand método. O InitMRUMenu será indefinido até após a etapa 8.

    this.InitMRUMenu(mcs);
    
  7. No final o MyTopLevelMenuPackage da classe, adicione o seguinte código logo após o SubItemCallback método. Esse código inicializa a lista de seqüências de caracteres que representam os itens a serem mostrados na lista MRU.

    private int numMRUItems = 4;
    private int baseMRUID = (int)PkgCmdIDList.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));
                }
            }
        }
    }
    
  8. Após a InitializeMRUList método, adicione o seguinte InitMRUMenu método. Isso inicializa os comandos de menu lista MRU.

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

    No código gerenciado, você deve criar um objeto de comando de menu para cada item da lista de possível. As chamadas do IDE a OnMRUQueryStatus método para cada item da lista até que não haja nenhum outro item. No código gerenciado, a única maneira do IDE saiba que não há nenhum outro item é criar todos os possíveis itens pela primeira vez. Se desejar, você pode marcar itens adicionais como não estiver visível no primeiro usando mc.Visible = false; depois que o comando de menu é criado. Esses itens, em seguida, torná-las visíveis mais tarde usando mc.Visible = true; na OnMRUQueryStatus método.

  9. Após a InitMRUMenu método, adicione o seguinte OnMRUQueryStatus método. Este é o manipulador que define o texto para cada item 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;
            }
        }
    }
    
  10. Após a OnMRUQueryStatus método, adicione o seguinte OnMRUExec método. Este é o manipulador para selecionar um item MRU. Este método Move o item selecionado para o topo da lista e, em seguida, exibe o item selecionado em uma caixa de mensagem.

    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));
            }
        }
    }
    
  11. Sobre o Build menu, clique em Build Solution para criar a solução. Corrija quaisquer erros que possam ocorrer.

Teste a lista MRU

Para testar a lista do menu MRU

  1. Pressione F5 para testar a exibição do novo comando.

  2. Sobre o TestMenu menu, clique em Comando Test. Isso exibe uma caixa de mensagem que indica que o comando foi selecionado.

    Dica

    Esta etapa é necessária para forçar o VSPackage para carregar e exibir corretamente a lista MRU.Se você ignorar esta etapa, a lista MRU não é exibida.

  3. Sobre o Menu Test menu, clique em Menu Sub. Uma lista de quatro itens é exibida no final do submenu, abaixo de um separador. Quando você clica em Item 3, uma caixa de mensagem deve aparecer e exibir o texto, "Selected Item 3". (Se não for exibida a lista de itens de quatro, verifique se você seguiu as instruções na etapa anterior.)

  4. Abra o submenu novamente. Observe que Item 3 agora está na parte superior da lista e outros itens foram levaram uma posição para baixo. Clique em Item 3 novamente e observe que, ainda, a caixa de mensagem exibe "Selected Item 3," que indica que o texto movido corretamente para a nova posição em conjunto com o rótulo de comando.

Consulte também

Tarefas

Como: adicionar dinamicamente os itens de Menu

Outros recursos

Explicações passo a passo para comandos, Menus e barras de ferramentas

Comandos, Menus e barras de ferramentas