如何在多行文本框中选择行号

3

我在我的窗体(winforms)中有一个System.Windows.Forms.TextBox控件,其中有大量文本,使用vs 2008。

我想查找文本,并选择找到该文本的行号。

例如,我有一段臃肿的文本,我要查找“ERROR en línea”,并且我想在多行文本框中选择行号。

string textoLogDeFuenteSQL = @"SQL*Plus: Release 10.1.0.4.2 - Production on Mar Jun 1 14:35:43 2010

版权所有(c) 1982, 2005, Oracle。

******** 更多文本 ************

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64位生产版本 具有分区、数据挖掘和实时应用测试选项

WHERE LAVECODIGO = 'CO_PREANUL'

第2行出现错误:

ORA-00904:"LAVECODIGO":无效的标识符


(说明:该段内容是关于IT技术中的数据库错误提示信息)
INSERT INTO COM_CODIGOS

第1行出现错误:

ORA-00001: 违反唯一约束条件 (XACO.INX_COM_CODIGOS_PK)";

******** 更多文本 ************

有关此问题的示例代码吗?

2个回答

4

您可能需要查看TextBoxBase.GetLineFromCharIndex方法。该方法检索文本框中字符位置所在的行号。

string str = textBox2.Text;

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

            if (index !=-1)
            {                

              int  lineNo = textBox1.GetLineFromCharIndex(index);
            }

该方法使您能够根据方法中指定的索引参数确定行号。控件中的第一行文本返回值为零。GetLineFromCharIndex方法返回索引字符所在的物理行号。

1

编辑:此代码仅可搜索文本出现的次数。若要计算行号,请使用Fredrik的答案。

 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);
   }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接