Richtextbox: найти многострочную строку в многострочном тексте - PullRequest
0 голосов
/ 06 января 2019

У меня есть 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"

Я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Я что-то упустил?

Я тоже это пропустил, первый взгляд

В прекрасном руководстве написано:

Примечание Методы Find, которые принимают строку в качестве параметра, не могут найти текст, содержащийся более чем в одной строке текста в RichTextBox. Выполнение такого поиска вернет отрицательное значение (-1).

0 голосов
/ 06 января 2019

Метод RichTextBox.Find () не может выполнять поиск в нескольких строках Text.
Если вы собираетесь искать и выбирать содержимое разных строк, вы можете разбить строки на разные подстроки. Таким образом, вы сможете выбрать несколько строк, даже если они не являются смежными:

Примечание
RichTextBox преобразует \r\n (Environment.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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...