如何从RichTextBox中select文本,然后着色?

我想创build一个简单的编辑器,如记事本+ +简单的function…我需要在富文本框区域中的特定单词。 我怎样才能做到这一点?

例如:当用户写这些单词时,我想将它们着色为蓝色。 这些词是: forwhileiftry

我怎样才能让richtextboxselect一个特定的单词,然后给它们着色? 而且,如果我想在//之后发表评论和颜色,那么在richtextbox中是如何完成的?

如何在文本框中对行进行编号,以便在编辑器中进行编码时可以input行号?

以下是您可以构build的一些代码,以实现您想要的function。

 private void ColourRrbText(RichTextBox rtb) { Regex regExp = new Regex("\b(For|Next|If|Then)\b"); foreach (Match match in regExp.Matches(rtb.Text)) { rtb.Select(match.Index, match.Length); rtb.SelectionColor = Color.Blue; } } 

在RichTextBox中启用语法突出显示的CodeProject文章显示如何使用RichTextBox中的RegEx执行语法突出显示。 具体来说,查看实现的SyntaxRichtTextBox.cs

一般来说,你必须在RichTextBox中进行select。 您可以使用Find方法或使用SelectionStartSelectionLength属性来操作当前的select。 然后,您可以使用SelectionXXX属性更改选定文本的属性。 例如, SelectionColor会设置当前select的颜色等等。所以你必须在richtextbox中parsing文本,然后select部分文本并根据需要更改它们的属性。

使用RichTextBox编写好的文本编辑器可能非常麻烦。 你应该使用一些库,如Scintilla 。 看一看Scintilla的.NET包装器ScintillaNet。

你知道Notepad ++使用Scintilla吗?

您实际上不必重新发明轮子,因为有一个名为ScintillaNET的Scintilla的.NET端口,您可以作为源代码编辑器自由embedded您的应用程序:)

但是要回答你的问题,你需要了解的几个部分

  1. 寻找什么颜色
  2. 什么时候上色
  3. 如何着色

  4. 对于第一部分,可能有不同的方法,但我认为使用正则expression式将是一个不错的select。 我很抱歉,但是我不太了解正则expression式,所以在这种情况下我不能帮助你。

  5. 什么时候颜色是非常关键的,如果你做错了,你的应用程序将受到严重的性能损失。 我build议你参考由我们自己的Stack Overflow成员Cheeso完成的XPath Visualizer 。 看一看关于语法着色如何完成的源代码。 但是,如果你是ScintillaNET,一切都将被照顾。 无论如何,我真的似乎无法find这个文件,他清楚地显示了文本的颜色是如何完成的。 如果我find它,我绝对会在这里发布。

  6. VinayC介绍了我认为的第三个问题。 但基本上你可以使用SelectionColor和SelectionStart 。

这里是基于richtextbox语法突出显示的c-sharpcorner.com网站上的一个很好的链接 。 我假设你和任何人访问这个页面的类似问题想要做的学习目的。 但是如果有人想为某些商业级别的IDE做这个,那么它必须使用闪烁体或类似的。 另一种方法是直接更改richtextbox的RTF 。 在codeproject.com看看有很多类似这个问题的文章。

我遇到了一些问题,这里是我的解决scheme,打败了为什么要这样做,但它的工作原理:

  // position on end of control... richTextBox.UpdateLayout(); richTextBox.ScrollToEnd(); richTextBox.UpdateLayout(); // ...then select text and it will be position on top of control. richTextBox.Focus(); richTextBox.Selection.Select(foundRange.Start, foundRange.End); richTextBox.BringIntoView();