.NET中富文本框中的彩色文本

时间:2012-10-22 08:31:21

标签: c# .net vb.net

我有Rich TextBox来编辑XML文本 我想要如何为RichTextBox中的XML标签名称着色
我希望标签名称为红色或绿色 有没有办法呢?

6 个答案:

答案 0 :(得分:2)

使用this page计算出您所需的正则表达式。完成后,您可以使用类似以下方法的内容来更新RichTextBox

public static void HighlightSyntax(RichTextBox richTextBox, Regex yourRegex, Color someColor)
{
    richTextBox.BeginUpdate();
    int selPos = richTextBox.SelectionStart;
    richTextBox.SelectAll();
    richTextBox.SelectionColor = normTextColor;
    richTextBox.Select(selPos, 0);

    // For each match from the regex, highlight the word.
    foreach (Match keyWordMatch in yourRegex.Matches(richTextBox.Text))
    {
        richTextBox.Select(keyWordMatch.Index, keyWordMatch.Length);
        richTextBox.SelectionColor = someColor;
        richTextBox.Select(selPos, 0);
        richTextBox.SelectionColor = normTextColor;
    }
    richTextBox.EndUpdate();
}

您也可以采用计时器在设定的时间后自动更新。

我希望这会有所帮助。

请注意。对于大文本文件,这样的方法会很慢!在这种情况下,我将采用Sinctilla.NET作为完整语法荧光笔,如下面的答案中所述......

答案 1 :(得分:1)

有些文章解释或建议了语法着色的可能方法,例如:How To Implement Syntax Highlighting In A WinForms Application

我认为最好和最简单的方法是使用Scintilla.NET来处理这个问题,这样你就可以专注于对你真正重要的事情,而不是再次重新发明轮子:)

答案 2 :(得分:0)

MSDN创建了一个简单的C#函数,用于格式化RichTextBox中的文本内容: LINK

答案 3 :(得分:0)

查看scintilla,一个很好的Windows源代码编辑组件,它也支持语法高亮显示。还有一个名为ScintillaNET的.NET包装器。

答案 4 :(得分:0)

使用简单的正则表达式查找每个标记的位置(开始和结束)并将其着色如下:

richtextbox1.Select(start, end-start);

richtextbox1.SelectionColor = Color.Green;

richtextbox1.Select(start, 0);

答案 5 :(得分:0)

我认为对于小语法突出显示项目,请自己动手!在已发布的语法编辑器中有一些突出显示的示例。

https://stackoverflow.com/a/13007641/1033686

https://stackoverflow.com/a/13007710/1033686

对于需要更好突出显示的大型项目,请使用Scintilla.NET(但要注意,它有点沉重,工作起来可能很棘手!)

http://scintillanet.codeplex.com/

对于企业项目,请使用actipro语法编辑器等商业产品。

http://www.actiprosoftware.com/products/controls/windowsforms/syntaxeditor?gclid=CI6rrqmglLMCFSfMtAodbE8AhA