【发布时间】:2017-04-25 23:08:11
【问题描述】:
我有一个 RichTextBox,用户可以按照以下规则在其中输入一些带有颜色代码的文本。
-
{ } ( ) | . (dot)这些字符应该是红色的。 -
[A-Z] [a-z] [0-9]下划线和连字符。这些应该是深灰色的。 - 其他一切都应该是蓝色的。
现在,当盒子的内容发生变化时,我有这个事件的代码。 只要检测到文本框内容发生变化,就会调用此方法。
public void colorCode() {
for (int i = 0 ; i < rtb.Text.Length ; i++) {
rtb.Select(i,1); //select a single character
char ch = rtb.Text[i];
if (ch == '{' || ch == '}' ||
ch == '(' || ch == ')' ||
ch == '.')
rtb.SelectionColor = Color.Red;
else if (isAlphaNumeric(ch))
rtb.SelectionColor = Color.DarkGrey;
else
rtb.SelectionColor = Color.Blue;
}
}
正如您所见,当有数百个字符时,这可能会非常慢。我该如何改善这种情况。
【问题讨论】:
-
您可以尝试对更新进行排队,而不是在每次更改后运行它们,请参阅this。
-
@Sinatr 非常感谢您提供更详细的答案。
-
也许你可以使用一个支持语法高亮的编辑器,比如AvalonEdit。在documentation 中,您可以找到how to define your own rules。
-
不确定它在这里是否有帮助,但您可以尝试我们在循环周围执行 supend/resumeLayout.. - 或仅每秒刷新一次。 -
-
尝试使用FastColoredTextBox。
标签: c# richtextbox