有效地对 RichTextBox 中的文本进行颜色编码
Efficiently color coding the text in a RichTextBox
我有一个 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;
}
}
如您所见,当有数百个字符时,这可能会非常慢。我该如何改善这种情况。
您或许可以在 KeyUp 事件中执行此操作,这样您就只会查看发生变化的单个字符。不确定这是否会更快。
private void rtb_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.OemPeriod
rtb.SelectionColor = Color.Red;
...
}
}
我有一个 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;
}
}
如您所见,当有数百个字符时,这可能会非常慢。我该如何改善这种情况。
您或许可以在 KeyUp 事件中执行此操作,这样您就只会查看发生变化的单个字符。不确定这是否会更快。
private void rtb_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.OemPeriod
rtb.SelectionColor = Color.Red;
...
}
}