【发布时间】:2012-10-22 16:56:10
【问题描述】:
我有富文本框来编辑 XML 文本
我想要如何为 RichTextBox 中的 XML 标签名称着色
我想要红色或绿色的标签名称。
有什么办法吗?
【问题讨论】:
-
你的意思是你想要一个处理 XML 格式文档的语法编辑器吗?
我有富文本框来编辑 XML 文本
我想要如何为 RichTextBox 中的 XML 标签名称着色
我想要红色或绿色的标签名称。
有什么办法吗?
【问题讨论】:
使用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 作为完整的语法荧光笔,如以下答案之一所述...
【讨论】:
有些文章解释或建议了可能的语法着色方法,例如:How To Implement Syntax Highlighting In A WinForms Application
我认为最好和最简单的方法是使用Scintilla.NET 来处理它,这样你就可以专注于对你来说真正重要的事情,而不是重新发明轮子:)
【讨论】:
MSDN 创建了一个简单的 C# 函数,用于格式化 RichTextBox 中的文本内容: LINK
【讨论】:
使用一个简单的正则表达式找到每个标签的位置(开始和结束),并将其着色,如下所示:
richtextbox1.Select(start, end-start);
richtextbox1.SelectionColor = Color.Green;
richtextbox1.Select(start, 0);
【讨论】:
查看scintilla,这是一个不错的 Windows 源代码编辑组件,它也支持语法高亮。还有一个 .NET 包装器,名为 ScintillaNET。
【讨论】:
我认为对于小型语法高亮项目,自己动手吧!已经发布了一些在语法编辑器中突出显示的示例。
https://stackoverflow.com/a/13007641/1033686
https://stackoverflow.com/a/13007710/1033686
对于需要更好地突出显示的大型项目,请使用 Scintilla.NET(但请注意,它有点重,而且很难开始工作!)
http://scintillanet.codeplex.com/
对于企业项目,请使用诸如 actipro 语法编辑器之类的商业产品。
【讨论】: