在RichTextbox中显示彩色文本

时间:2015-06-13 19:47:14

标签: c# wpf richtextbox

所以我有一串字符,通常格式如下:

“t e xt”,其中粗体字符为红色。

我想在richtextbox中显示这些类型的字符串,粗体字符为红色。

我有一个字符串变量中的文本,并且我在int变量中有红色字符(在字符串中)的位置。

我的解决方案是:

  • 获取红色字符前的字符
  • 获得红色字符
  • 获取红色字符后的字符
  • 显示红色字符前的字符
  • 显示红色字符(前景= Brushes.Red)
  • 在红色字符后显示字符

这是我到目前为止所得到的:

https://github.com/icebbyice/rapide/blob/master/rapide/SpreadWindow.xaml.cs

find:“// stackoverflow”(另外,seperateOutputs未完成)

我停在那里因为我认为必须有一种更有效的方法,因为我将经常更改富文本框的内容(最多1000个内容更改/ 60秒)。

那么,有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

您可以这样做:

// getting keywords/functions
string keywords = @"\b(e)\b";
MatchCollection keywordMatches = Regex.Matches(codeRichTextBox.Text, keywords);

// saving the original caret position + forecolor
int originalIndex = codeRichTextBox.SelectionStart;
int originalLength = codeRichTextBox.SelectionLength;
Color originalColor = Color.Black;

// MANDATORY - focuses a label before highlighting (avoids blinking)
menuStrip1.Focus();

// removes any previous highlighting (so modified words won't remain highlighted)
codeRichTextBox.SelectionStart = 0;
codeRichTextBox.SelectionLength = codeRichTextBox.Text.Length;
codeRichTextBox.SelectionColor = originalColor;

// scanning...
foreach (Match m in keywordMatches)
{
    codeRichTextBox.SelectionStart = m.Index;
    codeRichTextBox.SelectionLength = m.Length;
    codeRichTextBox.SelectionFont = new Font(codeRichTextBox.Font, FontStyle.Bold);
}

// restoring the original colors, for further writing
codeRichTextBox.SelectionStart = originalIndex;
codeRichTextBox.SelectionLength = originalLength;
codeRichTextBox.SelectionColor = originalColor;
codeRichTextBox.SelectionFont = new Font(codeRichTextBox.Font, FontStyle.Regular);

// giving back the focus
codeRichTextBox.Focus();

属于RichTextBox TextChanged Event

如果键入 e ,它将显示为粗体。其他任何文本将显示为Font.Regular

如果您要从 e 更改语法,请查看keywords string

这就是我所拥有的,希望对您有所帮助:)