4

MS Word 2010 用のアドインを開発しており、右クリック メニューにいくつかのメニュー項目を追加したいと考えています (テキストが選択されている場合のみ)。アイテムを追加する例をいくつか見ましたが、条件付きでアイテムを追加する方法が見つかりませんでした。つまり、OnRightClick ハンドラーのようなものをオーバーライドしたいと考えています。前もって感謝します。

4

1 に答える 1

9

WindowBeforeRightClickこれは非常に簡単です。イベントを処理する必要があります。イベント内で、必要なコマンドバーと特定のコントロールを見つけて、VisibleまたはEnabledプロパティを処理します。

以下の例でVisibleは、選択に基づいてテキストコマンドバーに作成されたカスタムボタンのプロパティを切り替えます(選択に「C#」が含まれている場合はボタンを非表示にし、そうでない場合は表示します)

    //using Word = Microsoft.Office.Interop.Word;
    //using Office = Microsoft.Office.Core;

    Word.Application application;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        application = this.Application;
        application.WindowBeforeRightClick +=
            new Word.ApplicationEvents4_WindowBeforeRightClickEventHandler(application_WindowBeforeRightClick);

        application.CustomizationContext = application.ActiveDocument;

        Office.CommandBar commandBar = application.CommandBars["Text"];
        Office.CommandBarButton button = (Office.CommandBarButton)commandBar.Controls.Add(
            Office.MsoControlType.msoControlButton);
        button.accName = "My Custom Button";
        button.Caption = "My Custom Button";
    }

    public void application_WindowBeforeRightClick(Word.Selection selection, ref bool Cancel)
    {
        if (selection != null && !String.IsNullOrEmpty(selection.Text))
        {
            string selectionText = selection.Text;

            if (selectionText.Contains("C#"))
                SetCommandVisibility("My Custom Button", false);
            else
                SetCommandVisibility("My Custom Button", true);
        }
    }

    private void SetCommandVisibility(string name, bool visible)
    {
        application.CustomizationContext = application.ActiveDocument;
        Office.CommandBar commandBar = application.CommandBars["Text"];
        commandBar.Controls[name].Visible = visible;
    }
于 2012-10-29T10:11:27.107 に答える