好的,我正在创建一个基本上必须与c#.net中的RichTextBox进行交互的类。它的主要功能之一是检测用户是否键入了特殊单词,如果找到匹配项,则必须更改单词的颜色(例如在文字处理器中)。

事实是,我不确定如何以有效的方式进行操作,因为每次修改RTB(RichTextBox)中的文本时,我都在考虑进行搜索,但是对于每次搜索整个RTB来说效率都太低用户输入新单词的时间(考虑到RTB中的文本很长)。

我找到了一种获取RTB中最后输入的字符并确定是否形成单词,然后检查是否为特殊单词的方法,但是问题是,如果RTB的文本是通过函数或粘贴文本进行修改的,那么它将不行。因此,我必须考虑到RTB的文本可以通过多种方式进行修改。

那么,每次更改文本以查找特殊字词时,在RTB中进行完整搜索是否有效? (考虑到上面的文字可能很长),或者您还有其他想法吗?

编辑: - - - - - - - - - - - - - -

好吧,如果有人感兴趣,我找到了解决问题的方法。

每次在RTB中使用事件RichTextBox_SelectionChanged更改选择时,我都会在类中使用一个整数来跟踪当前选择位置(光标在RTB中的当前位置或最后一次知道的位置)。像这样:

private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
   LastCursorPosition = CurrentCursorPosition;
   CurrentCursorPosition = richTextBox1.SelectionStart;
   CursorsDifferences = CurrentCursorPosition - LastCursorPosition;

}


这样可以确保每次用户在RTB中键入字符或修改文本时都会更新CurrentCursorPosition,LastCursorPosition将保留,那么我必须说吗?然后,如果用户将某些内容粘贴到RTB中,则光标位置的差异将保存在CursorsDifferences上,CursorsDifferences会告诉您所插入字符串的长度。基于此,您可以从中进行搜索
LastCursorPosition到CurrentCursorPosition。

注意:
从LastCursorPosition到CurrentCursorPosition的搜索可能不准确,因为LastCursorPosition可能不是单词的开头,因此您必须找到前一个''((whitesapce)或'\ n'(换行符),并在汉字前面找到字符的位置'或'\ n'并根据位置进行搜索,这同样适用于CurrentCursorPosition。

最佳答案

好吧,如果有人感兴趣,我找到了解决问题的方法。

每次在RTB中使用事件RichTextBox_SelectionChanged更改选择时,我都会在类中使用一个整数来跟踪当前选择位置(光标在RTB中的当前位置或最后一次知道的位置)。像这样:

private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
   LastCursorPosition = CurrentCursorPosition;
   CurrentCursorPosition = richTextBox1.SelectionStart;
   CursorsDifferences = CurrentCursorPosition - LastCursorPosition;

}


这样可以确保每次用户在RTB中键入字符或修改文本时都会更新CurrentCursorPosition,LastCursorPosition将保留,那么我必须说吗?然后,如果用户将某些内容粘贴到RTB中,则光标位置的差异将保存在CursorsDifferences上,CursorsDifferences会告诉您所插入字符串的长度。基于此,您可以从LastCursorPosition到CurrentCursorPosition进行搜索。

注意:从LastCursorPosition到CurrentCursorPosition的搜索可能不准确,因为LastCursorPosition可能不是单词的开头,因此您必须找到前一个''(whitesapce)或'\ n'(换行符),并在前面找到字符的位置'或'\ n'并根据位置进行搜索,同样的情况也适用于CurrentCursorPosition。

08-06 19:44