我想创建一个简单的编辑器,如Notepad++,功能简单......我需要在富文本框区域中为特定单词着色。我怎样才能做到这一点?
例如:当用户写下这些单词时,我想将它们着色为蓝色。这些词是:for
,while
,if
,try
等。
如何使richtextbox选择特定单词然后为其着色?并且,如果我想在//
之后发表评论并为所有内容着色,那么在richtextbox中如何完成?
如何在文本框中对行进行编号,所以现在我可以在编辑器中编码时使用行号?
这里有一些代码可以构建,以实现您想要的功能。
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;
}
}
CodeProject文章Enabling syntax highlighting in a RichTextBox展示了如何在RichTextBox中使用RegEx来执行语法突出显示。具体来说,请查看SyntaxRichtTextBox.cs
的实现。
通常,您必须在RichTextBox中进行选择。您可以使用Find
方法或使用SelectionStart
和SelectionLength
属性来操纵当前选择。然后,您可以使用SelectionXXX
属性更改所选文本的属性。例如,SelectionColor
将设置当前选择的颜色等。因此,您必须在richtextbox中解析文本,然后选择部分文本并根据您的要求更改其属性。
使用RichTextBox编写好的文本编辑器可能非常麻烦。你应该使用一些像Scintilla这样的库。看看ScintillaNet,一个超过Scintilla的.NET包装器。
你知道Notepad ++使用Scintilla吗?
你实际上没有必要通过麻烦来重新发明轮子,因为有一个名为.NET的scintilla的ScintillaNET端口你可以自由地嵌入你的应用程序作为源代码编辑器:)
但要回答您的问题,您需要了解的部分很少
这是一个关于基本richtextbox语法高亮的good link on c-sharpcorner.com 网站。我假设您和任何访问此页面的人遇到类似问题都希望为了学习目的而这样做。但是,如果任何人想要为某些商业级IDE制作它,那么它必须使用scintilla或类似的。另一种方法是直接change the RTF of the richtextbox。在codeproject.com中查看有很多类似于这个问题的文章。
我有一些问题,这是我的解决方案,打败我为什么必须这样做,但它的工作原理:
// 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();
Vb.net实现
Imports System.Text.RegularExpressions
Private Sub formatString()
Dim rg =New Regex("\b(for|while|if|try)\b")
Dim m As Match
For Each m In rg.Matches(RichTextBox1.Text)
RichTextBox1.Select(m.Index,m.Length)
RichTextBox1.SelectionColor=Color.Green
Next
End Sub