КАК ВЫБРАТЬ номер строки в TextBox Multiline

У меня есть большой текст в элементе управления System.Windows.Forms.TextBox в моей форме (winforms), против 2008 года.

Я хочу найти текст и выбрать номер строки, где я нашел этот текст.

Образец,

У меня жирный большой текст, и я нахожу "ERROR en línea", и я хочу выбрать номер строки в многострочном текстовом поле.

string textoLogDeFuenteSQL = @ "SQL * Plus: выпуск 10.1.0.4.2 - производство 1 марта, 14:35:43 2010

Copyright (c) 1982, 2005, Oracle. Все права защищены.

******** БОЛЬШЕ ТЕКСТА ************

Conectado a: Oracle Database 10g Enterprise Edition, выпуск 10.2.0.4.0 - 64-битное производство с опциями разделения, анализа данных и тестирования реальных приложений

ГДЕ LAVECODIGO = 'CO_PREANUL' * ОШИБКА en línea 2: ORA-00904: ""LAVECODIGO"": идентификатор не указан?

INSERT INTO COM_CODIGOS * ОШИБКА en línea 1: ORA-00001: ограничение игры (XACO.INX_COM_CODIGOS_PK) виолада ";

******** БОЛЬШЕ ТЕКСТА ************

Любой пример кода об этом? заранее спасибо,

2 ответа

Решение

Возможно, вы захотите взглянуть на метод TextBoxBase.GetLineFromCharIndex. Этот метод извлекает номер строки положения символа в текстовом поле.

string str = textBox2.Text;

            int index = textBox1.Text.IndexOf(str);

            if (index !=-1)
            {                

              int  lineNo = textBox1.GetLineFromCharIndex(index);
            }

"Этот метод позволяет определить номер строки на основе индекса символа, указанного в параметре index метода. Первая строка текста в элементе управления возвращает нулевое значение. Метод GetLineFromCharIndex возвращает номер физической строки, где индексированный символ является находится в пределах контроля."

РЕДАКТИРОВАТЬ: Это только находит вхождения искомого текста. Чтобы вычислить номера строк, используйте ответ Fredrik Mörk.

 using System.Text.RegularExpressions;

 public static void FindErrorInText(string input)
 {
   Regex rgx = new Regex("ERROR en linea \d*", RegexOptions.IgnoreCase);
   MatchCollection matches = rgx.Matches(input);
   if (matches.Count > 0)
   {
     Console.WriteLine("{0} ({1} matches):", input, matches.Count);
     foreach (Match match in matches)
        Console.WriteLine("   " + match.Value);
   }
 }
Другие вопросы по тегам