在RichTextBox中查找下一个单词时出现问题

时间:2010-04-08 22:02:20

标签: c# .net wpf richtextbox

当我在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)它会给我下一个单词的第一个字母,如果拼写错误的话。所以根据拼写只有其中一个有效?

我只是想知道你是否对这个问题有任何想法?我在这里做错了吗?

1 个答案:

答案 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);