2012-06-28 53 views
2

我需要在單擊字段後顯示的Word中的右鍵單擊菜單中添加一個命令。 這不是一個問題:檢查MS Word中單擊的字段

var ContextMenu = this.Application.CommandBars["Fields"]; 
button = (Office.CommandBarButton)ContextMenu.Controls.Add(1); 
button.Click += new Office._CommandBarButtonEvents_ClickEventHandler(button_Click); 

現在我需要獲得該領域的用戶點擊。我嘗試這樣做:

void button_Click(Office.CommandBarButton Ctrl, ref bool cancel) 
{ 
    var currentSelection = Globals.ThisAddIn.Application.ActiveWindow.Selection; 
    if (currentSelection.Fields.Count > 0) 
     var field = currentSelection.Fields[1] 
    //Do some stuff with the field 
} 

但它只會工作,如果選擇的領域,它不會例如工作時,用戶恰到好處點擊它沒有做出任何選擇或者只選擇部分字段中顯示的文本。

回答

0

我想出了這個解決方案,但仍然尋找的東西,不會有重複throught在文檔中的所有領域:

public static IEnumerable<Field> GetAllFieldsInSelection(this Selection selection) 
    { 
     foreach (Field f in selection.Document.Fields) 
     { 
      int fieldStart = f.Code.FormattedText.Start; 
      int fieldEnd = f.Code.FormattedText.End + f.Result.Text.Count();//field code + displayed text lenght 

      if (!((fieldStart < selection.Start) & (fieldEnd < selection.Start) | 
        (fieldStart > selection.End) & (fieldEnd > selection.End))) 
      { 
       yield return f; 
      } 
     } 
    } 
1

您可以顯著降低你通過檢查currentSelection.Range循環中的字段數.Paragrahs [1]點域。

+0

唯一的問題是,當用戶選擇一個大範圍(超過1段)時,它可能會跳過一些字段。但我可以迭代選擇段落而不是整個文檔。在幾乎所有情況下,這應該比我以前的解決方案更快。我會檢查這個。非常感謝!:) – Matek