2017-06-02 6 views
0

Je dois colorier chaque ligne en fonction du dernier caractère de chaque liste de formes de chaînes. C'est mon code et ça fait toujours la dernière ligne verte. Qu'est ce qui ne va pas avec ça?C# comment colorer chaque ligne dans richtextbox

List<string> plik = File.ReadAllLines(path).ToList(); 
     string pom; 
     int size = plik.Count; 
     richTextBox1.Clear(); 
     for (int i = 0; i < size; i++) 
     { 
      richTextBox1.Text += "[" + i.ToString() + "]" + " " + plik[i] + Environment.NewLine; 
      pom =plik[i]; 
      richTextBox1.Select(richTextBox1.GetFirstCharIndexFromLine(i), richTextBox1.Lines[i].Length); 
      // richTextBox1.Select(0, pom.Length); 
      if (pom.Substring(pom.Length - 1) == "n") 
      { 
       richTextBox1.SelectionBackColor = pom.Substring(pom.Length - 1) == "n" ? Color.Red :Color.Red; 
      } 
      if(pom.Substring(pom.Length - 1) != "n") 
      { 
       richTextBox1.SelectionBackColor = pom.Substring(pom.Length - 1) != "n"?Color.Green:Color.Green;     
      } 
     }  
+0

_richTextBox1.Text + = _ Boom. Ne modifiez jamais le texte !!!! Ou bien vous perdrez tout formatage. Vous pouvez sélectionner (comme vous le faites ci-dessous, puis échanger le SectedText, cependant.) – TaW

+0

'Toujours faire la dernière ligne verte' vraiment? [Si je compile ce code] (https://dotnetfiddle.net/hXHqy8) je reçois [cette sortie ] (http://i.imgur.com/1n531J5.png) Dans tous les cas, je pense que vous devriez d'abord [apprendre à utiliser les points d'arrêt] (https://www.google.com/search?q=how+to + use + le + visual + studio + debugger & oq = comment + utiliser + + + visual + studio + debugger & aqs = chrome.0.0l6.3343j0j4 & sourceid = chrome & ie = UTF-8) et parcourir votre code – sab669

+0

Aussi, pourquoi Si vous avez un code redondant, vous pouvez vérifier le dernier caractère de la ligne en cours ** quatre fois ** Vous n'avez qu'à le vérifier une fois. 'richTextBox1.SelectionBackColor = (pom.Substring (...) == 'n') «Color.Red: Color.Green» est tout ce dont vous avez besoin, vous n'avez pas besoin d'une instruction individuelle séparée «if» - vous avez déjà déterminé si le dernier caractère est un «n» ou non. re à l'intérieur de vos déclarations if, vous vérifiez à nouveau, et en haut de ce que vous attribuez la même couleur quel que soit le résultat de cette expression ternaire. – sab669

Répondre

1

vient remplacer

richTextBox1.Text += "[" + i.ToString() + "]" + " " + plik[i] + Environment.NewLine; 

par

richTextBox1.AppendText("[" + i.ToString() + "]" + " " + plik[i] + Environment.NewLine); 
0

Ajoutez le texte au lieu de le modifier en tout. L'utilisation de += remplacera toute la chaîne et vous perdrez donc la couleur définie à chaque fois. Utilisez AppendText à la place.

Vous pouvez également supprimer les if s inutiles dans votre code. Cela devrait fonctionner:

for (int i = 0; i < size; i++) 
{ 
    richTextBox1.AppendText("[" + i.ToString() + "]" + " " + plik[i] + Environment.NewLine); 
    richTextBox1.Select(richTextBox1.GetFirstCharIndexFromLine(i), richTextBox1.Lines[i].Length); 
    richTextBox1.SelectionBackColor = plik[i][plik[i].Length - 1] == 'n' ? Color.Red : Color.Green; 
}