我有一個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;
}
}
正如你所看到的,當有數百個字符時,這可能會非常緩慢。我該如何改善這種情況。
您可以嘗試排隊更新,而不是在每次更改後運行它們,請參閱[this](http://stackoverflow.com/q/15587767/1997232)。 – Sinatr
@Sinatr更加詳細的答案將不勝感激。 –
也許你可以使用支持語法高亮顯示的編輯器,如[AvalonEdit](http://avalonedit.net)。在[documentation](http://avalonedit.net/documentation/)中,你可以找到[如何定義你自己的規則](http://avalonedit.net/documentation/html/4d4ceb51-154d-43f0-b876-ad9640c5d2d8熱媒)。 – Oliver