2

我有 Rich TextBox 来编辑 XML 文本 我想要如何为 RichTextBox 内的 XML 标签名称着色
我想要红色或绿色的标签名称。
有什么办法吗?

4

6 回答 6

2

使用此页面找出您想要的正则表达式。一旦你有了这个,你可以使用类似下面的方法来更新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 作为完整的语法荧光笔,如以下答案之一所述...

于 2012-10-22T08:42:24.870 回答
1

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

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

于 2012-10-22T08:36:54.467 回答
0

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

于 2012-10-22T08:36:13.983 回答
0

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

于 2012-10-22T08:36:17.073 回答
0

使用一个简单的正则表达式找到每个标签的位置(开始和结束)并将其着色,如下所示:

richtextbox1.Select(start, end-start);

richtextbox1.SelectionColor = Color.Green;

richtextbox1.Select(start, 0);
于 2012-10-22T08:36:37.327 回答
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

于 2012-10-22T08:56:10.220 回答