我正在使用ScintillaNet,这是我的C#应用程序中Scintilla控件的包装器。我正在动态添加所有结尾的单词:(我们从现在开始调用此关键字)。我通过使用正则表达式来完成此操作,每次用户按下冒号键时,由空格分隔的关键字字符串。这是我的代码(在CharAdded事件中):
if (e.Ch == ':')
{
string wp = string.Empty;
Regex r = new Regex(@"\b\w+[:\b]");
MatchCollection m = r.Matches(Scintilla.Text);
for (int i = 0; i < m.Count; i++)
{
wp += " " + m[i].Value.Substring(0, m[i].Value.Length - 1); // Remove the colon
}
wp = wp.ToLower();
Scintilla.Lexing.Keywords[3] = wp;
}
现在问题是,每次键入新关键字并且用户按下冒号而不是仅突出显示关键字时,它将不必要地再次突出显示文档中的每个关键字。因此,尽管我的编码工作正常,编码也很糟糕,我想知道如何通过仅突出显示最后输入的关键字来更快地使代码更快。任何帮助和/或想法将不胜感激。
答案 0 :(得分:2)
实际上没有必要,你可能只检查最后一个单词,但如果用户粘贴长文本会怎样?除非您确定用户不会将文本粘贴到控件中或编辑文本的中间部分,否则您必须逐个检查每个单词。
答案 1 :(得分:1)
如果您的文字很长并且想要缩短处理时间,那么尝试插入一个隐藏的标记会将单词标记为“突出显示”并在正则表达式中忽略这些标记会怎样?