2017-10-06 10 views
0

Je voudrais lire une riche zone de texte, avoir chaque paragraphe dans une rangée et chaque ligne dans le paragraphe sa colonne.C# Remplir une listview avec des éléments d'une zone richtext (chaque ligne dans une colonne, se terminant par une ligne vide et aller à la ligne suivante)

Les paragraphes sont séparés par une ligne vide

Un exemple de l'information contenue dans le richtextbox ci-dessous:

richtextbox example

je voudrais avoir 3 colonnes. Ensuite, les deux premières lignes du paragraphe se trouvent dans les deux premières colonnes, puis toutes les lignes restantes dans la troisième colonne. Tout ce que j'ai en ce moment, c'est que j'ai lu chaque 3 colonnes dans la listview comme ci-dessous, et cela ne permet pas de réaliser ce que je veux.

for (int i = 0; i < richTextBox1.Lines.Count(); i += 3) 
    { 
     listView1.Items.Add(new ListViewItem(new[]{ 
      richTextBox1.Lines[i], 
      richTextBox1.Lines[i+1], 
      richTextBox1.Lines[i+2]]})); 
    } 

Répondre

0
//Add this method 


    public static HashSet<Tuple<int, string, string, string>> GetRichTextBoxSections(string[] Lines) 
     { 
      HashSet<Tuple<int, string, string, string>> Sections = new HashSet<Tuple<int, string, string, string>>(); 
      int SectionNumber = -1; 
      int SectionIndexLineNumber = 0; 
      bool FoundNewSectionNumber = false; 
      string Col1 = string.Empty; 
      string Col2 = string.Empty; 
      string Col3 = string.Empty; 
      int LinesCount = Lines.Length; 
      for (int i = 0; i < LinesCount; i++) 
      { 

       string NoSpaces = System.Text.RegularExpressions.Regex.Replace(Lines[i], @"\s+", ""); 
       if (FoundNewSectionNumber == false) 
       { 
        SectionIndexLineNumber = i; 
       } 



       if (FoundNewSectionNumber) 
       { 
        if (string.IsNullOrWhiteSpace(NoSpaces) || string.IsNullOrEmpty(NoSpaces) & FoundNewSectionNumber == true) 
        { 

         Sections.Add(new Tuple<int, string, string, string>(SectionNumber, Col1, Col2, Col3)); 
         SectionNumber = -1; 
         FoundNewSectionNumber = false; 
         Col1 = string.Empty; 
         Col2 = string.Empty; 
         Col3 = string.Empty; 
         SectionIndexLineNumber = 0; 
         continue; 

        } 
        else 
        { 
         switch (i - SectionIndexLineNumber) 
         { 
          case 1: 
           Col1 = Lines[i]; 
           break; 
          case 2: 
           Col2 = Lines[i]; 
           break; 
          default: 
           Col3 += Lines[i]; 
           break; 
         } 
        } 
       } 
       if (FoundNewSectionNumber == false) 
       { 
        FoundNewSectionNumber = int.TryParse(NoSpaces, out SectionNumber); 
       } 
       if (i == (LinesCount - 1)) 
       { 
        Sections.Add(new Tuple<int, string, string, string>(SectionNumber, Col1, Col2, Col3)); 
       } 
      } 
      return Sections; 
     } 

Appelez comme ci-dessous

foreach(Tuple<int,string,string,string> SectionData in GetRichTextBoxSections(richTextBox1.Lines)) 
      { 

listView1.Items.Add(new ListViewItem(new[]{ 
//Item1 is the section index if you need it 
      SectionData.Item2, 
      SectionData.Item3, 
      SectionData.Item4})); 
} 
+0

Salut G. Merci ..... mais je reçois cette erreur lorsque je tente exécuter le programme. "foreach statement ne peut pas fonctionner sur des variables de type 'void' car 'void' ne contient pas de définition publique pour 'GetEnumerator'" – BiKe

+0

Essayez maintenant ... Remplacez par le nouveau que je viens d'ajouter. \t Je l'avais changé avant mais j'ai oublié de cliquer sur sauvegarder, laissez-moi savoir si c'est OK ou non –

+0

D'accord, l'erreur est maintenant éteinte. Merci. Cependant, la première ligne n'est jamais explicitement un entier, et oui je voudrais l'inclure dans la listview. Comment ne faisons-nous pas de prendre uniquement des entiers mais aussi des chaînes? – BiKe