共用方式為


How to: 變更功能表命令的文字

下列步驟將示範如何使用 managed 程式碼來變更文字的標籤功能表命令和IMenuCommandService服務。

程序

若要使用 IMenuCommandService 來變更功能表命令標籤

  1. 例如,建立名稱為 VSPackage MenuText。 VSPackage 精靈執行時,選取 [ 功能表命令 ,並接受所有預設值。

  2. 在.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>
    
  3. 在 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";
        }
    }
    

    您也可以藉由變更來更新狀態的功能表命令,這個方法在VisibleChecked,以及Enabled上的屬性OleMenuCommand物件。

  4. 加入初始化 VSPackage 時,請執行下列動作的程式碼。

    1. 功能表命令服務的查詢。

    2. 建立OleMenuCommand物件,表示功能表命令。

    3. 新增BeforeQueryStatus事件處理常式。

    4. 功能表命令服務可讓功能表命令。 您必須變更MenuCommandOleMenuCommand,在下列範例中。

    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.DesignMicrosoft.VisualStudio.Shell命名空間,以存取IMenuCommandService介面和OleMenuCommand物件。

請參閱

其他資源

一般工作的命令、 功能表和工具列