问题
Situation:
I'm working with MS Word document's contents. I'm changing color of some words according to some rule. Words coloring occurs on each KeyPress event.
Problem:
When user types word which satisfies my rule typed word become colored and infects future text which will be typed right after colored text. But future text may not satisfay the rule. From the one hand, just typed text shouldn't be colored but from the other hand it already colored because it unfortunately goes right after colored text and was infected by it's style.
Question: How grab Word.Range object corresponding to the current cursor position and expicitly set font color to neutral default color? I tried
Word.Range r = app.Application.ActiveDocument.Range(
app.Application.ActiveDocument.Bookmarks[@"\Sel"].Range.Start,
app.Application.ActiveDocument.Bookmarks[@"\Sel"].Range.End);
r.Font.Color = WdColor.wdColorBlack;
and
Word.Range r = app.Application.ActiveDocument.Bookmarks[@"\Sel"].Range;
r.Font.Color = WdColor.wdColorBlack;
回答1:
To set default color you have two options:
//really default color:
r.Font.ColorIndex = Word.WdColorIndex.wdAuto;
//assuming default is black- set it to black
r.Font.ColorIndex = Word.WdColorIndex.wdBlack;
Edit. To set the color back to default as of selected range you could try this code:
Word.Application.Selection.Font.ColorIndex = Word.WdColorIndex.wdAuto;
It doesn't refer to active document but to Selection
of the application. After you run it next words are written in default color.
来源:https://stackoverflow.com/questions/17888104/how-programatically-set-text-styling-in-ms-word