Procedura: Creare i menu, i menu e i menu di scelta rapida
Per aggiungere un menu all'ambiente di sviluppo integrato di (IDE) Visual Studio, un VSPackage necessario utilizzare l'architettura di Visual Studio SDK per i menu del gruppo di controlli. I menu del gruppo di comandi abilitano i controlli essere riutilizzate e condiviso tra componenti e l'ambiente. Per ulteriori informazioni sui menu del gruppo di controlli, vedere Come Vspackage aggiunge gli elementi dell'interfaccia utente dell'IDE.
Per VSPackages, i menu sono definiti nella sezione di menu di un file di .vsct. Un file di .vsct definisce i menu e barre degli strumenti, gruppi e controlli. Un comando è determinato utente fa clic su per eseguire una funzione. Un gruppo è un contenitore per i controlli e i menu. un menu è un contenitore per i gruppi. Di conseguenza, per creare un menu di base, è necessario creare un menu, un gruppo di controlli e almeno un comando.
Sono disponibili tre modalità di base che un menu può apparire in Visual Studio, come segue:
Come menu nella barra dei menu principale.
come sottomenu di un altro menu.
Come menu di scelta rapida (in genere visualizzato da un fare clic con il pulsante destro del mouse).
In questo argomento viene illustrato come creare ogni tipo di menu. Nelle procedure dettagliate viene inoltre mostrato come eseguire questa operazione:
procedura dettagliata: Aggiunta di un menu alla barra dei menu di Visual Studio (c#)
procedura dettagliata: Implementare un menu di scelta rapida in una finestra degli strumenti
Per creare un menu, un sottomenu, o un menu di scelta rapida
Nel progetto, fare doppio clic sul file di .vsct per aprirlo nell'editor.
Se il progetto non dispone di un file di .vsct, aggiungerne uno. Se si crea un pacchetto tramite il modello importa pacchetto di Visual Studio, comando di menuselezionato; questo scopo verrà generato un file di .vsct.
Nella sezione di Symbols , individuare l'elemento di GuidSymbol che contiene i gruppi e controlli.
Creare un elemento di IDSymbol per ogni menu, gruppo, o ordinare che si desidera aggiungere, come illustrato nell'esempio seguente.
<GuidSymbol name="guidButtonGroupCmdSet" value="{f69209e9-975a-4543-821d-1f4a2c52d737}"> <IDSymbol name="MyMenuGroup" value="0x1020" /> <IDSymbol name="cmdidMyCommand" value="0x0100" /> </GuidSymbol>
Gli attributi di name degli elementi di IDSymbol e di GuidSymbol forniscono il GUID: coppia di ID per ogni nuovo menu, gruppo, o comando. GUID rappresenta un comando impostato definito per il package VS. È possibile definire set più di comando. ogni GUID: la coppia di ID deve essere univoca.
Definire il nuovo menu nella sezione di Menus , come segue:
Impostare guid e id sistema in base al GUID: ID di nuovo menu.
Impostare l'attributo priority.
L'attributo di priority viene utilizzato dal .vsct per determinare la posizione del menu tra gli altri oggetti nel gruppo padre.
I menu contenenti valori di priorità inferiore vengono visualizzati prima di menu che hanno valori con priorità più alta. Duplicate priority values are permitted, but the relative position of menus that have equal priority is determined by the order in which VSPackages are processed at run time, and that order cannot be predetermined. Omettendo i set di attributi priority il valore su 0.
Non stabilire una priorità per un menu di scelta rapida, in quanto la posizione è determinata dal codice che chiama.
Per i menu e sottomenu, impostare l'attributo di type a menu, che descrive un menu tipico. Per i menu di scelta rapida, impostare l'attributo di type a contesto.
Per le descrizioni di altri tipi validi del menu, quali le barre degli strumenti e controller di menu, vedere Elemento Menu.
Nella definizione del menu, creare una sezione di stringhe contenente un elemento di ButtonText per contenere il nome del menu nell'IDE e di un elemento di CommandName per contenere il nome del comando utilizzato per accedere al menu nella finestra di commando.
Se la stringa di testo del pulsante include “&„ il carattere, l'utente può aprire il menu premendo ALT più il carattere immediatamente successivo a “&„.
Aggiungere i flag di comando, in base alle proprie esigenze, per modificare l'aspetto e il comportamento del menu. A tale scopo, aggiungere un elemento di CommandFlag nella definizione del menu. Per ulteriori informazioni, vedere Elemento Command Flag.
Impostare l'elemento padre del menu. Per un menu o un menu standard, operare in uno dei modi seguenti, a seconda della progettazione:
Nell'elemento di Menu , creare un elemento di Elemento padre e impostare i relativi campi di id e di guid al GUID: ID del gruppo che ospiterà il menu, anche noto come il gruppo padre principale. Il gruppo padre può essere un gruppo creato nella sezione di Symbols , in un gruppo da un altro pacchetto, o un gruppo dall'IDE. Ad esempio, aggiungere menu alla barra dei menu di primo livello dell'IDE, dal menu di strumenti , impostare il padre a guidSHLMainMenu: IDG_VS_MM_TOOLSADDINS.
Nell'esempio seguente viene illustrato un menu che verrà visualizzato nella barra dei menu di Visual Studio.
<Menu guid="guidTopLevelMenuCmdSet" id="TopLevelMenu" priority="0x700" type="Menu"> <Parent guid="guidSHLMainMenu" id="IDG_VS_MM_TOOLSADDINS" /> <Strings> <ButtonText>TestMenu</ButtonText> <CommandName>TestMenu</CommandName> </Strings> </Menu>
È possibile omettere l'elemento di Parent se il menu deve essere inserito mediante la posizione del comando. Creare una sezione di CommandPlacements prima della sezione di Symbols e aggiunge un elemento di CommandPlacement con il GUID: ID del menu, una priorità e di un oggetto padre, come illustrato nell'esempio seguente.
<CommandPlacements> <CommandPlacement guid="guidButtonGroupCmdSet" id="cmdidMyCommand" priority="0x105"> <Parent guid="guidButtonGroupCmdSet" id="MyMenuGroup" /> </CommandPlacement> </CommandPlacements>
Creando più percorsi di comando che hanno lo stesso GUID: L'ID e ha cause diverse di padre un menu da visualizzare in più posizioni. Per ulteriori informazioni, vedere Elemento CommandPlacements.
Un menu standard deve disporre di un gruppo della barra dei menu di Visual Studio come relativo padre. Per un sottomenu, il padre deve essere un gruppo in un altro menu (sebbene il menu padre può essere una barra degli strumenti o un altro tipo di menu). Affinché un menu o un sottomenu stato viene visualizzato, è necessario ospitare un gruppo contenente almeno un comando attivo, o effettua il flag del comando di AlwaysCreate impostare.
I menu di scelta rapida non sono elementi padre o percorsi di comando. Instead, they must be activated in code. In genere, un menu di scelta rapida viene attivato in risposta a un clic con il pulsante destro del mouse su un piano di comando. Nell'esempio seguente viene definito un menu di scelta rapida.
<Menu guid="guidButtonGroupCmdSet" id="ShortcutMenu" type="Context"> <Strings> <ButtonText>Shortcut Menu</ButtonText> <CommandName>ShortcutMenu</CommandName> </Strings> </Menu>
Nella sezione di gruppi , creare un elemento di gruppo per contenere i controlli che devono visualizzato nel menu. The SynchronousUpdate esegue un aggiornamento sincrono sulle proprietà WordSpans and CurrentWord e genera l'evento TagsChanged.
Impostare la priorità del gruppo affinché venga riportato nella posizione desiderata dal menu.
I limiti di ogni gruppo nel menu verranno visualizzati come righe orizzontali.
Impostare l'elemento padre di questo nuovo gruppo al GUID: ID del menu creata. Utilizzando questo consente di posizionare il gruppo di comandi del menu.
Il gruppo nell'esempio seguente viene visualizzato nel menu di primo livello che è stato visualizzato in un esempio precedente.
<Group guid="guidTopLevelMenuCmdSet" id="MyMenuGroup" priority="0x0600"> <Parent guid="guidTopLevelMenuCmdSet" id="TopLevelMenu"/> </Group>
Inserendo il menu come illustrato nell'esempio in un gruppo nel menu di primo livello, diventa un sottomenu.
<Menu guid="guidTopLevelMenuCmdSet" id="SubMenu" priority="0x0100" type="Menu"> <Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup"/> <Strings> <ButtonText>Sub Menu</ButtonText> <CommandName>Sub Menu</CommandName> </Strings> </Menu>
Aggiungere i controlli al menu creando le voci del comando nella sezione di pulsanti e impostando il padre di ciascuno al GUID: ID del gruppo. Ogni elemento di pulsante deve essere un GUID: ID corrispondente a una voce nella sezione di Symbols .
Utilizzare l'attributo di priority di ogni voce del pulsante per specificare l'ordine in cui i controlli nel gruppo.
Nell'esempio seguente viene definito un comando che verrà visualizzato nel menu di primo livello.
<Button guid="guidTopLevelMenuCmdSet" id="cmdidTestCommand" priority="0x0100" type="Button"> <Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup" /> <Icon guid="guidImages" id="bmpPic1" /> <Strings> <CommandName>cmdidTestCommand</CommandName> <ButtonText>Test Command</ButtonText> </Strings> </Button>
Per ulteriori informazioni sui pulsanti e le voci di menu, vedere Elemento Button.
Per informazioni sulla distribuzione dei comandi di menu nel codice, vedere Procedura: Creare e gestire i comandi in Vspackage (c#) o le procedure dettagliate menzionate in precedenza in questo argomento.
Per attivare un menu di scelta rapida
ottenere il GUID: ID del menu di scelta rapida. Per impostazione predefinita, il modello del pacchetto crea una classe di GuidList in un file di PkgCmdID.cs per utilizzare il GUID di l comando. Il modello viene inoltre creata una classe di PkgCmdIdList in un file di PkgCmdId.cs per utilizzare i valori integer ID dei controlli che vengono dichiarati nel modello. I menu di scelta rapida e tutti i controlli aggiuntivi devono essere dichiarati dopo che il modello è stato completato. Nell'esempio seguente vengono illustrate queste dichiarazioni.
static class PkgCmdIDList { public const uint cmdidColorChange = 0x101; public const int ColorMenu = 0x1000; public const int cmdidRed = 0x102; public const int cmdidYellow = 0x103; public const int cmdidBlue = 0x104; };
Questo passaggio può essere omesso se i valori ID e di GUID verranno utilizzati direttamente. Tuttavia, si consiglia di impostare i valori di seguito per la leggibilità.
Connettersi a un gestore eventi. In genere, la connessione dei menu di scelta rapida in fare clic con il pulsante destro del mouse di un piano di comando, come illustrato nell'esempio seguente.
private void MyToolWindow_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { OleMenuCommandService mcs = this._parent.mcs; if (null != mcs) { CommandID menuID = new CommandID( GuidList.guidTWShortcutMenuCmdSet, PkgCmdIDList.ColorMenu); Point p = this.PointToScreen(e.GetPosition(this)); mcs.ShowContextMenu(menuID, (int)p.X, (int)p.Y); } }
Il metodo di PointToScreen convertire la posizione di menu, relativo al controllo, a una posizione sullo schermo. Il metodo di ShowContextMenu visualizzare il menu di scelta rapida.
Il file che contiene il gestore eventi deve includere lo spazio dei nomi di System.ComponentModel.Design per accedere alla classe di OleMenuCommandService e lo spazio dei nomi di Microsoft.VisualStudio.Shell per accedere all'interfaccia di IMenuCommandService .
using Microsoft.VisualStudio.Shell; using System.ComponentModel.Design;
Vedere anche
Attività
Procedura: Creare e gestire i comandi in Vspackage (c#)
Concetti
Altre risorse
Attività comuni con i controlli, i menu e le barre degli strumenti