2010-06-02 29 views
3

J'ai grand texte dans le contrôle System.Windows.Forms.TextBox sous ma forme (WinForms), vs 2008.COMMENT sélectionnons numéro de ligne dans TextBox multiligne

Je veux trouver un texte, puis sélectionnez le numéro de ligne où J'ai trouvé ce texte.

Sample,

J'ai texte gros et gras, et je trouve « erreur en línea », et je veux sélectionner le numéro de ligne dans zone de texte multiligne.

chaîne

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

Copyright (c) 1982, 2005, Oracle Tous droits réservés

..

******** PLUS TEXTE ************

Conectado a: Oracle Database 10g Enterprise Edition de presse 10.2.0.4.0 - 64bit production Avec la Options de partitionnement, d'exploration de données et de test d'application réelle

OÙ LAVECODIGO = 'CO_PREANUL' * erreur en línea 2: ORA-00904: "" LAVECODIGO "": Identificador pas v lido

INSERT INTO COM_CODIGOS * erreur en línea 1: ORA-00001 : restricción única (XACO.INX_COM_CODIGOS_PK) violada ";

******** PLUS TEXTE ************

Tout exemple de code à ce sujet? merci à l'avance,

Répondre

4

Vous voudrez peut-être regarder la méthode TextBoxBase.GetLineFromCharIndex. Cette méthode récupère le numéro de ligne de la position du caractère dans la zone de texte.

string str = textBox2.Text; 

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

      if (index !=-1) 
      {     

       int lineNo = textBox1.GetLineFromCharIndex(index); 
      } 

« Cette méthode permet de déterminer le numéro de ligne en fonction de l'index de caractère spécifié dans le paramètre d'index de la méthode. La première ligne de texte dans le contrôle retourne la valeur zéro. La méthode GetLineFromCharIndex retourne physique numéro de ligne où le caractère indexé se trouve dans le contrôle. "

1

EDIT: Ceci trouve seulement les occurrences du texte recherché. Pour calculer les numéros de ligne, utilisez la réponse 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); 
    } 
}