首页 > 解决方案 > Richtextbox:在多行文本中查找多行字符串

问题描述

我有一个 RichTextBox,我在其中显示一个段落,我需要更改多行文本的颜色。

我尝试使用该RichTextBox.Find方法,但它仅适用于单行。
这是我的代码:

richTextBox1.Text=@"Line 1
Line 2
Line 3
Line 4
Line 5
"
Font fnt = new Font("Verdana", 8F, FontStyle.Italic, GraphicsUnit.Point);
string mystring = @"Line 2
Line 3";
//string mystring = @"Line 2";
if (richTextBox1.Find(mystring)>0)
{
    int my1stPosition = richTextBox1.Find(mystring);
    richTextBox1.SelectionStart=my1stPosition;
    richTextBox1.SelectionLength=mystring.Length;
    richTextBox1.SelectionFont=fnt;
    richTextBox1.SelectionColor=Color.CadetBlue;
}

因此,当我搜索"Line 2"它时它可以工作但它不适用于:

"Line 2  
Line 3"

我错过了什么吗?

标签: c#winformsrichtextbox

解决方案


RichTextBox.Find()方法无法在Text.
如果您的意图是搜索和选择不同行的内容,那么您可以将这些行拆分为不同的子字符串。这样,即使它们不连续,您也可以选择多行:

注意
RichTextBox转换\r\nEnvironment.Newline在 Windows 中)为\n.

例如:

richTextBox1.Text = "Line 1\nLine 2\nLine 3\nLine 4\nLine 5";
string[] searchLines = new[] {"Line 2", "Line 3"};

using (Font fnt = new Font("Verdana", 8F, FontStyle.Italic, GraphicsUnit.Point))
{
    foreach (string line in searchLines)
    {
        int my1stPosition = richTextBox1.Find(line);
        if (my1stPosition > 0)
        {
            richTextBox1.SelectionStart = my1stPosition;
            richTextBox1.SelectionLength = line.Length;
            richTextBox1.SelectionFont = fnt;
            richTextBox1.SelectionColor = Color.CadetBlue;
        }
    }
}

如果您仍想搜索整个字符串,IndexOf请在RichTextBox.Text属性上使用:

string searchLines = $"Line 2\nLine 3";

(...)
int my1stPosition = richTextBox1.Text.IndexOf(searchLines);

推荐阅读