Compartir a través de


tutorial: agregar una lista de archivos usados recientemente a un submenú

Este tutorial compila en demostraciones en tutorial: Agregar un submenú en un menú, y muestra cómo agregar una lista dinámica a un submenú. Formularios de lista dinámicos base para crear una lista de archivos usados recientemente (MRU).

Una lista de menú dinámica comienza con un marcador de un menú. Cada vez que se muestra el menú, el entorno de desarrollo integrado de (IDE) Visual Studio dicho VSPackage todos los comandos que se muestran en el marcador. Una lista dinámica puede aparecer en cualquier parte de un menú. Sin embargo, las listas dinámicas se almacenan y se muestran habitualmente único en submenús o en los inferior de menús. Mediante estos modelos de diseño, permite a la lista de comandos dinámica para expandir y el contrato sin afectar a la posición de otros comandos respecto al menú. En este tutorial, la lista de archivos usados recientemente dinámica se muestra en la parte inferior de un submenú existente, independiente del resto del submenú por una línea.

Técnicamente, una lista dinámica también se puede aplicar a una barra de herramientas. Sin embargo, desalentamos que utilizan porque una barra de herramientas debe permanecer intacta a menos que el usuario tome medidas específicas para cambiarla.

Este tutorial crea una lista de archivos usados recientemente de cuatro elementos que cambien su orden cada vez que uno de ellos es seleccionado (el elemento seleccionado se desplaza a la parte superior de la lista).

Para obtener más información sobre los menús y archivos de .vsct, vea comandos, menús, y barras de herramientas.

Requisitos previos

Para completar este tutorial, debe instalar Visual Studio 2010 SDK.

NotaNota

Para obtener más información sobre el SDK de Visual Studio, vea Información general de Visual Studio que extiende.Para averiguar cómo descargar el SDK de Visual Studio, vea Centro para desarrolladores de extensibilidad de Visual Studio en el sitio web de MSDN.

Ubicaciones de la plantilla de proyecto paquete de Visual Studio

La plantilla de proyecto paquete de Visual Studio está disponible en tres ubicaciones en el cuadro de diálogo de Nuevo proyecto :

  • En extensibilidad de Visual Basic. El idioma predeterminado del proyecto es Visual Basic.

  • En extensibilidad de C#. El lenguaje predeterminado del proyecto es C#.

  • En La otra extensibilidad de los tipos de proyecto. El lenguaje predeterminado del proyecto es C++.

crear un VSPackage

para crear el TopLevelMenu VSPackage

Los procedimientos de este tutorial se supone que el nombre del Paquete es TopLevelMenu, que es el nombre que se utiliza en tutorial: Agregar un menú a la barra de menús de Visual Studio (C#).

crear un comando dinámico de la lista de elementos

para crear un comando dinámico de la lista de elementos

  1. TopLevelMenu.vsct abierto.

  2. En la sección de Symbols , en el nodo de GuidSymbol denominado guidTopLevelMenuCmdSet, agregue el token del grupo de MRUListGroup y el comando de cmdidMRUList , como sigue.

  3. En la sección de Groups , agregue el grupo declarado después de las entradas de grupo existente.

  4. En la sección de Buttons , agregue un nodo para representar el comando recién declarado, después de las entradas existentes del botón.

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

    El indicador de DynamicItemStart habilita el comando para generar dinámicamente.

  5. En el menú de Generar ,haga clic Generar solución.

    haciendo esto recompila el archivo de .vsct con los cambios. Corrija cualquier error que pueda producirse durante la compilación.

  6. Presione F5 para probar la presentación del nuevo comando.

  7. En el menú de TestMenu , haga clic en el nuevo submenú, submenú, para mostrar el nuevo comando, Marcador MRU. Después de una lista de archivos usados recientemente dinámica de comandos implementada en el procedimiento siguiente, esta etiqueta de comando se reemplazará por esa lista cada vez que se abre el submenú.

    NotaNota

    Debe cerrar Visual Studio experimental antes de continuar a la sección siguiente.

Rellenar la lista de archivos usados recientemente

Para rellenar la lista de archivos usados recientemente mediante código administrado

  1. PkgCmdID.cs abierto o PkgCmdID.vb en el editor de código.

  2. Agregue el siguiente identificador de comando después de los id. existentes del comando en la definición de clase de PkgCmdIDList .

    public const uint cmdidMRUList = 0x200;
    
  3. TopLevelMenuPackage.cs abierto o TopLevelMenuPackage.vb en el editor de código.

  4. En la parte superior del archivo, al final de la lista de instrucciones using, agregue la siguiente instrucción.

    using System.Collections;
    
  5. Busque el método de Initialize . Puede tener que buscar la región oculta etiquetada “los miembros del paquete” y expandirla. El método de Initialize está en esta región oculta.

  6. El método de Initialize , agregue la siguiente línea justo después de la última llamada al método de AddCommand . InitMRUMenu será indefinido hasta después del paso 8.

    this.InitMRUMenu(mcs);
    
  7. Al final de la clase de MyTopLevelMenuPackage , agregue el código siguiente justo después del método de SubItemCallback . Este código inicializa la lista de cadenas que representan los elementos que se van a mostrar en la lista de archivos usados recientemente.

    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. Después del método de InitializeMRUList , agregue el siguiente método de InitMRUMenu . Esto inicializa los comandos de menú de la lista de archivos usados recientemente.

    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);
        }
    }
    

    En código administrado, debe crear un objeto de comando de menú para cada elemento posible en la lista de archivos usados recientemente. El IDE llama al método de OnMRUQueryStatus para cada elemento de la lista de archivos usados recientemente hasta que no haya elementos. En código administrado, la única manera para que el IDE sepa que no hay elementos es crear todos los elementos posibles primero. Si lo desea, puede marcar elementos adicionales como no visibles al principio mediante mc.Visible = false; después de crear el comando de menú. Estos elementos se pueden hacer visible después con mc.Visible = true; en el método de OnMRUQueryStatus .

  9. Después del método de InitMRUMenu , agregue el siguiente método de OnMRUQueryStatus . Éste es el controlador que establece el texto de cada 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;
            }
        }
    }
    
  10. Después del método de OnMRUQueryStatus , agregue el siguiente método de OnMRUExec . Éste es el controlador para seleccionar un elemento MRU. Este método mueve el elemento seleccionado al principio de la lista y muestra el elemento seleccionado en un cuadro de mensaje.

    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. Para compilar la solución, en el menú Compilar, haga clic en Compilar solución. Corrija cualquier error que pueda producirse.

Prueba de la lista de archivos usados recientemente

Para probar la lista de menú MRU

  1. Presione F5 para probar la presentación del nuevo comando.

  2. En el menú de TestMenu , haga clic Comando de prueba. Ello muestra un cuadro de mensaje que indica que el comando se seleccionado.

    NotaNota

    Este paso es necesario forzar el paquete VSPackage para cargar y correctamente para mostrar la lista de archivos usados recientemente.Si omite este paso, la lista de archivos usados recientemente no se muestra.

  3. En el menú de menú Prueba , haga clic submenú. Una lista de cuatro elementos se muestra al final del submenú, debajo de un separador. Al hacer clic en punto 3, debe aparecer un cuadro de mensaje y mostrar el texto, “elemento seleccionado 3 ". (Si la lista de cuatro elementos no se muestra, asegúrese de que ha seguido las instrucciones en el paso anterior.)

  4. Abra el submenú de nuevo. Observe que punto 3 está en la parte superior de la lista y los otros elementos se han empujado abajo lugar. Haga clic en punto 3 de nuevo y observe que el cuadro de mensaje todavía muestra “elemento seleccionado 3 ", que indica que el texto correctamente ha desplazado a la nueva posición así como etiqueta del comando.

Vea también

Tareas

Cómo: Agregar dinámicamente los elementos de menú

Otros recursos

Tutoriales para los comandos, menús, barras de herramientas y

comandos, menús, y barras de herramientas