How to: 變更功能表命令的文字
下列步驟將示範如何使用 managed 程式碼來變更文字的標籤功能表命令和IMenuCommandService服務。
程序
若要使用 IMenuCommandService 來變更功能表命令標籤
例如,建立名稱為 VSPackage MenuText。 VSPackage 精靈執行時,選取 [ 功能表命令 ,並接受所有預設值。
在.vstc 檔案中,加入TextChanges您的功能表命令,如下列範例所示的旗標。
<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>
在 VSPackage 中,建立要顯示的功能表指令之前呼叫事件處理常式。
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"; } }
您也可以藉由變更來更新狀態的功能表命令,這個方法在Visible, Checked,以及Enabled上的屬性OleMenuCommand物件。
加入初始化 VSPackage 時,請執行下列動作的程式碼。
功能表命令服務的查詢。
建立OleMenuCommand物件,表示功能表命令。
新增BeforeQueryStatus事件處理常式。
功能表命令服務可讓功能表命令。 您必須變更MenuCommand到OleMenuCommand,在下列範例中。
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);
當您使用封裝範本來建立功能表命令時,它將會自動加入必要的程式碼。 不過,它會宣告為功能表命令MenuCommand物件,並不會將BeforeQueryStatus處理常式。 因此,您必須變更功能表命令宣告以使用OleMenuCommand ,並在下一行加入處理常式。
封裝檔案必須包含System.ComponentModel.Design和Microsoft.VisualStudio.Shell命名空間,以存取IMenuCommandService介面和OleMenuCommand物件。