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++使用什么吗

实际上,您不必经历所有的麻烦来重新发明轮子,因为有一个名为闪烁的端口,您可以作为源代码编辑器自由嵌入到应用程序中:)

但要回答您的问题,您需要了解的部分很少

  • 找到要涂的颜色
  • 什么时候上色
  • 如何上色

  • 对于第一部分,可能有不同的方法,但我认为使用将是一个不错的选择。对不起,我不太懂正则表达式,所以在这种情况下我帮不了你

  • 何时上色非常关键,如果您做错了,您的应用程序将受到严重的性能损失。我建议您参考我们自己的StackOverflow成员Cheeso所做的。看看源代码,了解语法着色是如何完成的。但如果你有闪光,一切都会好起来的。不管怎么说,我真的找不到这个文档,他清楚地展示了文本的着色过程。如果我找到它,我肯定会把它贴在这里

  • 我认为第三个问题是维纳伊克提出的。但基本上你是和你的朋友一起使用的


  • 以下是一些代码,您可以基于这些代码来实现所需的功能

    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
    取消选择文本并将光标移动到末尾