C#VSTO:突出显示电子邮件正文 - ClearHitHighlight()不清除?

时间:2017-03-19 11:27:22

标签: c# outlook vsto highlight

使用VSTO和C#,我试图让Outlook突出显示电子邮件正文中的特定单词。到目前为止,我已经能够使用以下代码完成此操作:

       Outlook.MailItem mailItem = this.inspector.CurrentItem as Outlook.MailItem;

       if (inspector.IsWordMail())
       {
           var outlookWordDocument = inspector.WordEditor as Word.Document;
           if (outlookWordDocument == null || outlookWordDocument.Application.Selection == null)
           { return; }

           var wordRange = outlookWordDocument.Application.Selection.Range;

           Word.Find find_highlight = wordRange.Find;
           find_highlight.HitHighlight("apples", Word.WdColor.wdColorDarkRed);
           find_highlight.ClearHitHighlight(); // trying to clear for testing purposes, but does nothing
       }

我的问题是ClearHitHighlight()函数不能清除任何内容。我可以清除的唯一方法是,如果我立即执行另一次搜索。见下面的评论:

find_highlight.HitHighlight("apples"); //highlights "apples"
find_highlight.HitHighlight("oranges"); //highlights "oranges" too
find_highlight.ClearHitHighlight(); //does nothing
find_highlight.HitHighlight("pears"); //clears previous highlights, adds pears

作为替代方案,我可以通过格式化电子邮件的实际正文来突出显示文本,但是这个HitHighlight函数似乎更合适 - 只要我能弄清楚如何在完成时清除标记!

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

不要在Word范围上调用find,而是在文档的内容变量上调用find。不确定原因,但这种变化会导致正确的行为。

改变这个:

var wordRange = outlookWordDocument.Application.Selection.Range;

Word.Find find_highlight = wordRange.Find;

对此:

Word.Find find_highlight = outlookWordDocument.Content.Find;