變更命令的外觀

您可以變更命令的外觀,向使用者提供回饋。 例如,您可能想要命令在無法使用時看起來不一樣。 您可以讓命令可供使用或無法使用、隱藏或顯示命令,或核取或取消核取功能表上的命令。

若要變更命令的外觀,請執行下列其中一個動作:

  • 在命令表檔案的命令定義中指定適當的旗標。

  • 使用 OleMenuCommandService 服務。

  • 實作 IOleCommandTarget 介面並修改原始命令物件。

    下列步驟說明如何使用 Managed Package Framework (MPF) 尋找和更新命令的外觀。

變更功能表命令的外觀

  1. 依照變更功能表命令的文字中的指示,建立名為 New Text 的功能表項目。

  2. 在 ChangeMenuText.cs 檔案中,加入下列 using 陳述式:

    using System.Security.Permissions;
    
  3. 在 ChangeMenuTextPackageGuids.cs 檔案中,新增下列這一行:

    public const string guidChangeMenuTextPackageCmdSet= "00000000-0000-0000-0000-00000000";  // get the GUID from the .vsct file
    
  4. 在 ChangeMenuText.cs 檔案中,將 ShowMessageBox 方法中的程式碼取代為下列內容:

    private void Execute(object sender, EventArgs e)
    {
        ThreadHelper.ThrowIfNotOnUIThread();
        var command = sender as OleMenuCommand;
        if (command.Text == "New Text")
            ChangeMyCommand(command.CommandID.ID, false);
    }
    
  5. OleMenuCommandService 物件取得您想要更新的命令,然後在命令物件上設定適當的屬性。 例如,下列方法會使 VSPackage 命令集的指定命令可供使用或無法使用。 下列程式碼會使名為 New Text 的功能表項目在點擊之後無法使用。

    public bool ChangeMyCommand(int cmdID, bool enableCmd)
    {
        bool cmdUpdated = false;
        var mcs = this.package.GetService<IMenuCommandService, OleMenuCommandService>();
        var newCmdID = new CommandID(new Guid(ChangeMenuTextPackageGuids.guidChangeMenuTextPackageCmdSet), cmdID);
        MenuCommand mc = mcs.FindCommand(newCmdID);
        if (mc != null)
        {
            mc.Enabled = enableCmd;
            cmdUpdated = true;
        }
        return cmdUpdated;
    }
    
  6. 建置此專案並開始偵錯。 應該會顯示 Visual Studio 實驗執行個體。

  7. 在 [工具] 功能表上,按一下 [叫用 ChangeMenuText] 命令。 此時,命令名稱為「叫用 ChangeMenuText」,因此命令處理常式不會呼叫 ChangeMyCommand()

  8. 在 [工具] 功能表上,您現在應該會看到 [新增文字]。 按一下 [新增文字]。 該命令現在應顯示為灰色。