コマンドの外観の変更

コマンドの外観を変更することで、ユーザーにフィードバックを提供できます。 たとえば、コマンドを使用できないときは、その外観が変化するようにします。 コマンドの使用可能と使用不可、表示と非表示、メニューでのオンとオフを切り替えることができます。

コマンドの外観を変更するには、次のいずれかの操作を実行します。

  • コマンド テーブル ファイルのコマンド定義で、適切なフラグを指定します。

  • OleMenuCommandService サービスを使用します。

  • IOleCommandTarget インターフェイスを実装し、未加工のコマンド オブジェクトを変更します。

    次の手順では、マネージド パッケージ フレームワーク (MPF) を使用して、コマンドの外観を検索し、更新する方法を説明します。

メニュー コマンドの外観を変更するには

  1. メニュー コマンドのテキストを変更する」の手順に従って、New Text という名前のメニュー項目を作成します。

  2. ConnectMenuText.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 の呼び出し] コマンドをクリックします。 この時点では、コマンド名が Invoke ChangeMenuTextであるため、コマンド ハンドラーは ChangeMyCommand() を呼び出しません。

  8. [ツール] メニューに、[新しいテキスト] が表示されます。 [新しいテキスト] をクリックします。 コマンドがグレーで表示されます。