2012-08-05 11 views
4

Я разрабатываю надстройку для MS Word 2010, и я хочу добавить несколько пунктов меню в контекстное меню (только при выборе некоторого текста). Я видел несколько примеров для добавления элементов, но не смог найти, как добавить элементы условно. Короче говоря, я хочу переопределить что-то вроде обработчика OnRightClick. Спасибо заранее.MS Word Надстройка: RIght click handler

ответ

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; 
    } 
+1

это было легко , Мне интересно, как я не смог найти этого обработчика после стольких поисковых запросов :) Спасибо, хотя –