检查在MS Word中单击了哪个字段

时间:2012-06-28 11:37:03

标签: c# ms-word vsto

我需要在单击字段后在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
}

但它只有在选择了字段时才会起作用,例如当用户右键单击它而不选择任何内容或仅选择部分字段显示文本时,它将无效。

2 个答案:

答案 0 :(得分:1)

通过检查currentSelection.Range.Paragrahs [1] .Fields,可以显着减少迭代的字段数。

答案 1 :(得分:0)

我提出了这个解决方案,但仍然在寻找一些不必遍历文档中所有字段的内容:

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