Procedura: Per modificare il testo di un comando di menu
Nei passaggi seguenti viene illustrato come modificare l'etichetta di testo di un comando di menu tramite codice gestito e il servizio di IMenuCommandService .
Procedura
Per modificare un'etichetta di comando del menu utilizzando IMenuCommandService
Creare un package VS denominato, ad esempio, MenuText. Durante l'esecuzione della procedura guidata package VS, comando di menu selezionato e accettano tutte le impostazioni predefinite.
Nel file di .vstc, aggiungere il flag di TextChanges al comando di menu, come illustrato nell'esempio seguente.
<Button guid="guidMenuTextCmdSet" id="cmdidMyCommand" priority="0x0100" type="Button"> <Parent guid="guidMenuTextCmdSet" id="MyMenuGroup" /> <Icon guid="guidImages" id="bmpPic1" /> <CommandFlag>TextChanges</CommandFlag> <Strings> <CommandName>cmdidMyCommand</CommandName> <ButtonText>My Command name</ButtonText> </Strings> </Button>
Nel package VS, creare un gestore eventi per chiamare prima il comando di menu viene visualizzato.
Private Sub OnBeforeQueryStatus(ByVal sender As Object, ByVal e As EventArgs) Dim myCommand As OleMenuCommand = TryCast(sender, OleMenuCommand) If myCommand IsNot Nothing Then myCommand.Text = "New Text" End If End Sub
private void OnBeforeQueryStatus(object sender, EventArgs e) { var myCommand = sender as OleMenuCommand; if (null != myCommand) { myCommand.Text = "New Text"; } }
È inoltre possibile aggiornare lo stato del comando di menu in questo metodo modificando Visible, Checkede le proprietà di Enabled su OleMenuCommand oggetto.
Aggiungere il codice che esegue le azioni seguenti quando il package VS viene inizializzato.
Query per il servizio del comando di menu.
creare un oggetto di OleMenuCommand che rappresenta il comando di menu.
aggiungere il gestore eventi di BeforeQueryStatus .
Immettere il comando di menu al servizio del comando di menu. È necessario modificare MenuCommand a OleMenuCommand, come nell'esempio seguente.
Dim menuCommandID As CommandID = New CommandID(GuidList.guidMenuTextCmdSet, CInt(PkgCmdIDList.cmdidMyTextCommand)) Dim menuItem As OleMenuCommand = New OleMenuCommand(New EventHandler(AddressOf MenuItemCallback), menuCommandID) AddHandler menuItem.BeforeQueryStatus, AddressOf OnBeforeQueryStatus mcs.AddCommand(menuItem)
// Create the command for the menu item. CommandID menuCommandID = new CommandID(GuidList.guidMenuTextCmdSet, (int)PkgCmdIDList.cmdidMyCommand); OleMenuCommand menuItem = new OleMenuCommand(MenuItemCallback, menuCommandID ); menuItem.BeforeQueryStatus += new EventHandler(OnBeforeQueryStatus); mcs.AddCommand(menuItem);
Quando si utilizza il modello del pacchetto per creare un comando di menu, aggiungere il codice necessario automaticamente. Tuttavia, dichiara il comando di menu come oggetto e di MenuCommand non aggiunge il gestore di BeforeQueryStatus . Pertanto, è necessario modificare la dichiarazione del comando di menu per utilizzare OleMenuCommand e aggiungere il gestore nella riga successiva.
Il file di pacchetto deve includere System.ComponentModel.Design e gli spazi dei nomi di Microsoft.VisualStudio.Shell per accedere all'interfaccia di IMenuCommandService e l'oggetto di OleMenuCommand .
Vedere anche
Altre risorse
Attività comuni con i controlli, i menu e le barre degli strumenti