如何在RichTextBox控件中实现语法高亮 [C#]?

17

我如何在richtextbox控件中实现随用户输入的语法高亮,并使用String[]关键字。我将很快在网络上发布一个轻量级记事本,希望它具有语法高亮功能。我正在使用Windows窗体。 有人能发一个代码示例吗?

6个回答

12

1
第一个链接已经失效。 - Momoro

5

Scintilla控件是一款出色的源代码编辑器,具有语法高亮等多种功能。您可以将其嵌入到自己的应用程序中,并且有.NET包装器可用。

使用Scintilla,您可以指定关键字,它会在您输入时应用语法高亮。


如果您从http://scintillanet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34393下载.NET包装器,则可以将文件ScintillaNet.dll添加到项目的“引用”中(如果您正在使用Visual Studio)。 - Matt Warren
需要将其中一个dll部署到Windows\System32,这是一个很大的缺点。 - Perica Zivkovic
你能把它放在与你的 .exe 文件相同的目录下吗? - Matt Warren

2

您是否在使用WinForms或WPF?

如果您在使用WPF,可以看一下AvalonEdit。它是免费且开源的,在SharpDevelop(开源IDE)中使用。


2

您可以在richtextbox中更改选定单词的字体。查看控件的Select和SelectedFont属性。

但实际上,您需要遍历单词,检查单词是否存在于关键字中,然后使用上述属性更改字体。


1

并非完全回答您的问题,但您是否查看过SharpDevelop的文本编辑器组件?它非常轻巧(<200kB IIRC),可以轻松地嵌入WinForms应用程序,并且具有内置的多种语言的语法高亮功能。

否则,您可能需要查看this CodeProject page。它会在您输入时重新格式化RTF,对于大文件来说效率不是很高,而且其中包含一些令人毛骨悚然的catch (Exception) { }块,因此我不确定是否会在生命关键应用中使用它,但它绝对是了解如何完成此操作的良好起点。


1

语法高亮并不是一项容易高效完成的任务。你可以找到许多解决方案(比如涉及修改RTF的方案),但这些都只是一次性的解决方案。如果你想在编辑过程中实时高亮和取消高亮单词,那么你的代码必须做好准备。我不会重新发明轮子,而是使用ICSharp.TextEditor或类似工具来解决你的问题。


2
语法高亮对于一个文本渲染器来说,它被设计成在呼叫你回调或迭代接收文本之前进行,实际上非常简单:它只是一种按照标记类型对文本进行分类的词法分析。但 RTF 和其他富文本编辑器并不是这样设计的,它们没有将模型数据和其展示分离。 - Barry Kelly
是的,看起来RTF现在相当老了... :-) - jdehaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接