tutorial: Agregar un controlador de menú en una barra de herramientas
Este tutorial se basa en el tutorial de agregar una barra de herramientas a una ventana de herramientas y muestra cómo agregar un controlador del menú a la barra de herramientas de la ventana de herramientas. los pasos mostrados aquí también se pueden aplicar a la barra de herramientas que se crea en el tutorial, Agregar una barra de herramientas en el IDE.
Un controlador de menú es un control dividida. El lado izquierdo del controlador del menú muestra el comando últimos, y se puede ejecutar haciendo clic en. El lado derecho del controlador del menú es una flecha que, cuando se hace clic, abrir una lista de comandos adicionales. Al hacer clic en un comando en la lista, el comando se ejecuta, y reemplace el comando en el lado izquierdo del controlador del menú. De esta manera, el controlador del menú funciona como un botón de comando que muestra siempre el comando últimos de una lista.
Los controladores de menú pueden aparecer en menús pero se utilizan con mayor frecuencia en las barras de herramientas.
Este tutorial muestra un controlador del menú que proporciona tres opciones seleccionables, que se definen en el archivo de .vsct. 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.
Nota
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.
Crear un controlador del menú
Para crear un controlador del menú
Siga los procedimientos descritos en tutorial: agregar una barra de herramientas a una ventana de herramientas para crear una ventana de herramientas VSPackage que tiene una barra de herramientas.
En Explorador de soluciones, haga doble clic en TWToolbar.vsct para abrirlo en un editor de texto.
En la sección de Símbolos , en el elemento de GuidSymbol denominado “guidTWToolbarCmdSet”, declare el controlador de menú, el grupo de controlador de menú, y tres elementos de menú.
<IDSymbol name="TestMenuController" value="0x1300" /> <IDSymbol name="TestMenuControllerGroup" value="0x1060" /> <IDSymbol name="cmdidMCItem1" value="0x0130" /> <IDSymbol name="cmdidMCItem2" value="0x0131" /> <IDSymbol name="cmdidMCItem3" value="0x0132" />
En la sección de menús , después de la última entrada de menú, defina el controlador de menú como menú.
<Menu guid="guidTWToolbarCmdSet" id="TestMenuController" priority="0x0100" type="MenuController"> <Parent guid="guidTWToolbarCmdSet" id="TWToolbarGroup" /> <CommandFlag>IconAndText</CommandFlag> <CommandFlag>TextChanges</CommandFlag> <CommandFlag>TextIsAnchorCommand</CommandFlag> <Strings> <ButtonText>Test Menu Controller</ButtonText> <CommandName>Test Menu Controller</CommandName> </Strings> </Menu>
Los marcadores de TextChanges y de TextIsAnchorCommand deben incluir para permitir que el controlador del menú para reflejar el comando seleccionado pasado.
En la sección de Grupos , después de la última entrada de grupo, agregue el grupo del controlador del menú.
<Group guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" priority="0x000"> <Parent guid="guidTWToolbarCmdSet" id="TestMenuController" /> </Group>
Estableciendo el controlador del menú como elemento primario, cualquier comando título en este grupo aparecerá en el controlador del menú. Se omite el atributo de priority , que la establece en el valor predeterminado de 0, porque se el único grupo en el controlador del menú.
En la sección de Botones , después de la última entrada del botón, agregue un elemento de Botn para cada uno de los elementos de menú.
<Button guid="guidTWToolbarCmdSet" id="cmdidMCItem1" priority="0x0000" type="Button"> <Parent guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" /> <Icon guid="guidImages" id="bmpPic1" /> <CommandFlag>IconAndText</CommandFlag> <Strings> <ButtonText>MC Item 1</ButtonText> <CommandName>MC Item 1</CommandName> </Strings> </Button> <Button guid="guidTWToolbarCmdSet" id="cmdidMCItem2" priority="0x0100" type="Button"> <Parent guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" /> <Icon guid="guidImages" id="bmpPic2" /> <CommandFlag>IconAndText</CommandFlag> <Strings> <ButtonText>MC Item 2</ButtonText> <CommandName>MC Item 2</CommandName> </Strings> </Button> <Button guid="guidTWToolbarCmdSet" id="cmdidMCItem3" priority="0x0200" type="Button"> <Parent guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" /> <Icon guid="guidImages" id="bmpPicSearch" /> <CommandFlag>IconAndText</CommandFlag> <Strings> <ButtonText>MC Item 3</ButtonText> <CommandName>MC Item 3</CommandName> </Strings> </Button>
En este punto, puede examinar el controlador del menú.
Presione F5para abrir una instancia de Visual Studioexperimental.
En el menú de Ver , elija Otras ventanas, y haga clic en Ventana de herramientas de prueba.
El controlador del menú en la barra de herramientas de la ventana de herramientas.
Haga clic en la flecha en el lado derecho del controlador del menú para ver los tres posibles comandos.
Observe que cuando se hace clic en un comando, el lado izquierdo del controlador del menú para mostrar ese comando. En la siguiente sección, agregaremos el código para provocar estos comandos.
Cierre Visual Studioexperimental.
Implementar los comandos del controlador del menú
Para implementar los comandos del controlador del menú en código administrado
En Explorador de soluciones, haga doble clic en PkgCmdID.cs para abrirlo en un editor de texto.
Después de los id. existentes del comando en la clase de PkgCmdIDList, agregue los id. de comando para los tres elementos de menú.
public const int cmdidMCItem1 = 0x130; public const int cmdidMCItem2 = 0x131; public const int cmdidMCItem3 = 0x132;
En Explorador de soluciones, abra TWToolbarPackage.cs.
En la parte superior de la clase de TWToolbarPackage, agregue lo siguiente:
private int currentMCCommand; // The currently selected menu controller command
Busque la región oculta etiquetada “los miembros del paquete” y expándala haciendo clic en el signo más en el margen izquierdo.
En el método de Initialize , inmediatamente después de la última llamada al método de AddCommand , agregue código para distribuir los eventos para cada comando a través de los mismos controladores.
for (int i = PkgCmdIDList.cmdidMCItem1; i <= PkgCmdIDList.cmdidMCItem3; i++) { CommandID cmdID = new CommandID(GuidList.guidTWToolbarCmdSet, i); OleMenuCommand mc = new OleMenuCommand(new EventHandler(OnMCItemClicked), cmdID); mc.BeforeQueryStatus += new EventHandler(OnMCItemQueryStatus); mcs.AddCommand(mc); // The first item is, by default, checked. if (PkgCmdIDList.cmdidMCItem1 == i) { mc.Checked = true; this.currentMCCommand = i; } }
Al final de la clase de TWToolbarPackage , justo después del método de MenuItemCallback , agregue un método para marcar el comando seleccionado como seleccionado.
private void OnMCItemQueryStatus(object sender, EventArgs e) { OleMenuCommand mc = sender as OleMenuCommand; if (null != mc) { mc.Checked = (mc.CommandID.ID == this.currentMCCommand); } }
Después del método de OnMCItemQueryStatus , agregue un controlador de eventos para cuando el usuario selecciona un comando en el controlador del menú:
private void OnMCItemClicked(object sender, EventArgs e) { OleMenuCommand mc = sender as OleMenuCommand; if (null != mc) { string selection; switch (mc.CommandID.ID) { case PkgCmdIDList.cmdidMCItem1: selection = "Menu controller Item 1"; break; case PkgCmdIDList.cmdidMCItem2: selection = "Menu controller Item 2"; break; case PkgCmdIDList.cmdidMCItem3: selection = "Menu controller Item 3"; break; default: selection = "Unknown command"; break; } this.currentMCCommand = mc.CommandID.ID; IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell)); Guid clsid = Guid.Empty; int result; uiShell.ShowMessageBox( 0, ref clsid, "Test Tool Window Toolbar Package", string.Format(CultureInfo.CurrentCulture, "You selected {0}", selection), string.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, out result); } }
Compile la solución, y corrija cualquier error que se produzca.
Probar el controlador de menú
Para probar el controlador del menú
Presione F5 para abrir una instancia de Visual Studioexperimental.
Abra Ventana de herramientas de prueba.
El controlador del menú en la barra de herramientas de la ventana de herramientas y muestra el “punto 1 " de la mc.
Haga clic en el botón del controlador del menú a la izquierda de la flecha.
Aparecerá un cuadro de diálogo muestra punto seleccionado 1 " del controlador del menú el mensaje “. Observe que el mensaje corresponde al texto del botón del controlador del menú.
Haga clic en la flecha en el controlador del menú para mostrar tres elementos, el primero de ellos es seleccionado y tiene un cuadro de resaltado alrededor del icono. Haga clic Punto 3 de la mc.
Aparecerá un cuadro de diálogo muestra punto seleccionado 3 " del controlador del menú el mensaje “. El botón del controlador del menú muestra ahora el “punto 3 " de la mc.
Haga clic en la flecha en el controlador del menú para mostrar las opciones. Observe que el nuevo valor predeterminado, Punto 3 de la mc, selecciona ahora.
Vea también
Tareas
tutorial: agregar una barra de herramientas a una ventana de herramientas
tutorial: Agregar una barra de herramientas en el IDE
Otros recursos
Tutoriales para los comandos, menús, barras de herramientas y