好的人,我正在创建一个基本上必须与c#.net中的RichTextBox交互的类。其主要功能之一是检测用户是否键入了一个特殊字,如果找到匹配则必须更改字的颜色(如文字处理器)。
问题是我不确定如何以有效的方式去做,因为每次修改RTB(RichTextBox)中的文本时我都在考虑进行搜索,但是搜索它的效率太低每次用户键入一个新单词时整个RTB(考虑到RTB中的文本很长)。
我找到了一种方法来获取RTB中输入的最后一个字符,并确定是否形成了一个单词然后检查它是否是一个特殊单词,但问题是如果RTB的文本被函数或粘贴文本修改那它就行不通了。因此,我必须考虑到RTB的文本可以通过多种方式进行修改。
那么,每次更改文本以找到特殊字时,在RTB中进行完整搜索是否有效? (考虑到它上面的文字可能很长)或者你们有什么其他方法吗?
编辑:----------------------------
如果有人感兴趣,我找到了解决问题的方法。
我在类中使用了一个整数来跟踪当前的选择位置(RTB中光标的当前或最后知道位置),每次在RTB中使用事件RichTextBox_SelectionChanged更改选择时,都会更新它。像这样:
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
LastCursorPosition = CurrentCursorPosition;
CurrentCursorPosition = richTextBox1.SelectionStart;
CursorsDifferences = CurrentCursorPosition - LastCursorPosition;
}
这将确保每当用户键入一个字符或修改RTB中的文本并且LastCursorPosition将保持时,CurrentCursorPosition将被更新,我是否必须说出来?然后,如果用户将某些内容粘贴到RTB CursorsDifferences中,则游标位置的差异将保存在CursorsDifferences上,这将告诉您插入的字符串的长度。基于此,您可以进行搜索 LastCursorPosition to CurrentCursorPosition。
注意: 从LastCursorPosition搜索到CurrentCursorPosition可能不准确,因为LastCursorPosition可能不是单词的开头,因此您必须找到前一个''(whitesapce)或'\ n'(换行符)并获取前面的字符位置''或'\ n'并根据位置进行搜索,同样适用于CurrentCursorPosition。
答案 0 :(得分:0)
如果有人感兴趣,我找到了解决问题的方法。
我在类中使用了一个整数来跟踪当前的选择位置(RTB中光标的当前或最后知道位置),每次在RTB中使用事件RichTextBox_SelectionChanged更改选择时,都会更新它。像这样:
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
LastCursorPosition = CurrentCursorPosition;
CurrentCursorPosition = richTextBox1.SelectionStart;
CursorsDifferences = CurrentCursorPosition - LastCursorPosition;
}
这将确保每当用户键入一个字符或修改RTB中的文本并且LastCursorPosition将保持时,CurrentCursorPosition将被更新,我是否必须说出来?然后,如果用户将某些内容粘贴到RTB CursorsDifferences中,则游标位置的差异将保存在CursorsDifferences上,这将告诉您插入的字符串的长度。基于此,您可以从LastCursorPosition到CurrentCursorPosition进行搜索。
注意:从LastCursorPosition到CurrentCursorPosition的搜索可能不准确,因为LastCursorPosition可能不是单词的开头,因此你必须找到前一个''(whitesapce)或'\ n'(换行符)并获取在''或'\ n'前面的字符并根据位置进行搜索,同样的事情适用于CurrentCursorPosition。