C# 如何从RichTextBox中选择文本,然后为其着色?
我想创建一个简单的编辑器,如具有简单功能的。。。我需要给富文本框区域中的特定单词上色。我该怎么做 例如:当用户写这些单词时,我想把它们涂成蓝色。这些词是:C# 如何从RichTextBox中选择文本,然后为其着色?,c#,C#,我想创建一个简单的编辑器,如具有简单功能的。。。我需要给富文本框区域中的特定单词上色。我该怎么做 例如:当用户写这些单词时,我想把它们涂成蓝色。这些词是:for,while,if,try,等等 如何使richtextbox选择特定的单词,然后为其着色? 而且,如果我想在/之后对所有内容进行注释和着色,如何在richtextbox中完成 如何对文本框中的行进行编号,以便在编辑器中编写代码时现在可以计算行号?通常,您必须在RichTextBox中进行选择。您可以使用Find方法或使用Selectio
for
,while
,if
,try
,等等
如何使richtextbox选择特定的单词,然后为其着色?
而且,如果我想在/
之后对所有内容进行注释和着色,如何在richtextbox中完成
如何对文本框中的行进行编号,以便在编辑器中编写代码时现在可以计算行号?通常,您必须在RichTextBox中进行选择。您可以使用
Find
方法或使用SelectionStart
和SelectionLength
属性操作当前选择。然后,您可以使用SelectionXXX
properties更改所选文本的属性。例如,SelectionColor
将设置当前选择的颜色等。因此,您必须解析richtextbox中的文本,然后选择部分文本并根据需要更改其属性
使用RichTextBox编写一个好的文本编辑器可能相当麻烦。你应该使用一些像这样的库。看一看,斯金特拉上的.NET包装器。你知道Notepad++使用什么吗 实际上,您不必经历所有的麻烦来重新发明轮子,因为有一个名为闪烁的端口,您可以作为源代码编辑器自由嵌入到应用程序中:) 但要回答您的问题,您需要了解的部分很少
以下是一些代码,您可以基于这些代码来实现所需的功能
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文章展示了如何在RichTextBox中使用正则表达式来执行语法高亮显示。具体来说,请查看SyntaxRichtTextBox.cs
了解实现。这里是一个关于基本richttextbox语法突出显示的网站。我假设你和任何一个因为类似问题而访问此页面的人都希望这样做是为了学习。但是,如果有人想为某些人制作一些商业级IDE,那么它必须使用或类似的工具。
另一种方法是直接。在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
行号问题应该是一个单独的问题(请不要“堆叠”问题)。很可能使用
TextBox
或richttextbox
不容易实现。尝试快速彩色文本框(),它不仅仅是一个语法高亮,甚至可以作为Nuget()使用。好的,我会看看闪烁。我希望它很容易理解…我会看看斯金特拉。我一直在问这些问题,因为我以前不知道有一个图书馆可以做这项工作&我希望它很容易理解和使用;)这将突出显示单词的部分,如果我永远键入,它将突出显示ForeverThanks alex,但当我找到一个变通方法“string kewyords=“For | Next | if | Then”时;kewyords=kewyords.Replace(“|”),“\b |\b”)`顺便说一句,如果您在按键事件中调用它,那么您需要添加rtb.DeselectAll()
rtb.SelectionStart=rtbCommand.Text.Length
取消选择文本并将光标移动到末尾