当我在RichTextBox中输入一个字符时,我希望从其TextRange中获取下一个字符。
所以我就是这样做的:
TextPointer ptr1= RichTextBox.CaretPosition;
char nextChar = GetNextChar();
//we continue until there is a character
while (char.IsWhiteSpace(nextChar))
{
ptr1= ptr1.GetNextInsertionPosition(LogicalDirection.Forward);
nextChar = GetCharacterAt(Ptr1);
}
//so now ptr1 is pointing to a character, and we do something with that TextPointer
ChangeFormat(ptr1);
然后我得到下一个字符的ptr1,从TextPointer获取TextRange,然后进行更改。
所以这是问题吗?
当下一个单词拼写正确时,我没有问题,但如果拼写不正确那么ptr1就不会指向下一个单词的第一个字符(第二个字符),如果我使用GetNextContextPosition(LogicalDirection.Forward)它会给我下一个单词的第一个字母,如果拼写错误的话。所以根据拼写只有其中一个有效?
我只是想知道你是否对这个问题有任何想法?我在这里做错了吗?
答案 0 :(得分:1)
我通过使用Offset修复了问题,因为这与拼写的方式无关。这与我们添加任何文本后跳过TextPointer的事实有关。
所以这是修复:
int Index = RichTextBox.CaretPosition.DocumentStart.GetOffsetToPosition(RichTextBox.CaretPosition);
TextPointer ptr1= RichTextBox.CaretPosition.DocumentStart.GetPositionAtOffset(Index);
char nextChar = GetNextChar();
//we continue until there is a character
while (char.IsWhiteSpace(nextChar))
{
Index++;
ptr1= RichTextBox.CaretPosition.DocumentStart.GetPositionAtOffset(Index);
nextChar = GetCharacterAt(Ptr1);
}
//so now ptr1 is pointing to a character, and we do something with that TextPointer
ChangeFormat(ptr1);