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
- Siga os procedimentos do Passo a passo: Adicionando um Submenu a um Menu para criar o submenu que é modificado nos procedimentos a seguir.
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
Abra TopLevelMenu.vsct.
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.
No Groups seção, adicione o grupo de declarado após as entradas existentes do grupo.
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.
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.
Pressione F5 para testar a exibição do novo comando.
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
PkgCmdID.cs ou PkgCmdID.vb no editor de código aberto.
Adicione o seguinte comando ID após as IDs de comando existente na PkgCmdIDList definição de classe.
public const uint cmdidMRUList = 0x200;
TopLevelMenuPackage.cs ou TopLevelMenuPackage.vb no editor de código aberto.
Na parte superior do arquivo, no final da lista de usar declarações, adicione a instrução a seguir.
using System.Collections;
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.
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);
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)); } } } }
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.
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; } } }
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)); } } }
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
Pressione F5 para testar a exibição do novo comando.
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.
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.)
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