2

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

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

4

2 回答 2

2

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

于 2013-02-17T13:21:52.700 回答
1

我想出了这个解决方案,但仍在寻找不必遍历文档中所有字段的东西:

    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;
            }
        }
    }
于 2012-06-29T15:43:35.077 回答