我有Rich TextBox来编辑XML文本
我想要如何为RichTextBox中的XML标签名称着色
我希望标签名称为红色或绿色
有没有办法呢?
答案 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语法编辑器等商业产品。