2016-02-20 1 views
0

У меня есть проект winform, используя richtextbox. Код;WinForm richtextbox SelectionColor ошибка

List<string> list = new List<string>(); 
     list.Add("S\nS"); 
     list.Add("*S\nS"); 
     list.Add("S\nS"); 
     list.Add("*S\nS"); 

     for (int s = 0; s < list.Count; s++) 
     { 
      if (list.ElementAt(s)[0] == '*') 
      { 
       richTextBox1.SelectionColor = Color.Red; 
       richTextBox1.AppendText(list.ElementAt(s).Substring(1, list.ElementAt(s).Length - 1)); 
       if (s != list.Count - 1) richTextBox1.AppendText("\r\n\r\n"); 
      } 
      else 
      { 
       richTextBox1.SelectionColor = Color.Black; 
       richTextBox1.AppendText(list.ElementAt(s)); 
       if (s != list.Count - 1) richTextBox1.AppendText("\r\n\r\n"); 
      } 
     } 

Первый код результата:

First code result

Другой код, Единственное изменение "S" вместо "S":

List<string> list = new List<string>(); 
     list.Add("Ş\nŞ"); 
     list.Add("*Ş\nŞ"); 
     list.Add("Ş\nŞ"); 
     list.Add("*Ş\nŞ"); 

     for (int s = 0; s < list.Count; s++) 
     { 
      if (list.ElementAt(s)[0] == '*') 
      { 
       richTextBox1.SelectionColor = Color.Red; 
       richTextBox1.AppendText(list.ElementAt(s).Substring(1, list.ElementAt(s).Length - 1)); 
       if (s != list.Count - 1) richTextBox1.AppendText("\r\n\r\n"); 
      } 
      else 
      { 
       richTextBox1.SelectionColor = Color.Black; 
       richTextBox1.AppendText(list.ElementAt(s)); 
       if (s != list.Count - 1) richTextBox1.AppendText("\r\n\r\n"); 
      } 
     } 

Второй Код Результат:

enter image description here

Почему черные "с" Характеры второй линии во втором коде? В чем проблема, не поддерживает мою культуру или нет ошибок в richtextbox?

ответ

0

Ваш код работает с моим образцом, но у нас могут быть разные версии .NET, среда и так далее. Пожалуйста, попробуйте этот код, он устанавливает границы выбора для соответствующих значений и должны решить эту проблему вы показаны в примере результатах:

List<string> list = new List<string>(); 
list.Add("Ş\nŞ"); 
list.Add("*Ş\nŞ"); 
list.Add("Ş\nŞ"); 
list.Add("*Ş\nŞ"); 

for (int s = 0; s < list.Count; s++) 
{ 
    var diffColor = list.ElementAt(s)[0] == '*'; 
    var txtLength = richTextBox1.Text.Length; 
    var myString = diffColor ? list.ElementAt(s).Substring(1, list.ElementAt(s).Length - 1) : list.ElementAt(s); 

    richTextBox1.AppendText(myString); 
    richTextBox1.SelectionStart = txtLength; 
    richTextBox1.SelectionLength = myString.Length; 
    richTextBox1.SelectionColor = diffColor ? Color.Red : Color.Black; 

    if (s != list.Count - 1) richTextBox1.AppendText("\r\n\r\n"); 
} 

richTextBox1.Select(0,0); 

Если черный используются по умолчанию, и вы просто хотите, чтобы отметить определенные части на красное это код может быть реорганизован на:

List<string> list = new List<string>(); 
list.Add("Ş\nŞ"); 
list.Add("*Ş\nŞ"); 
list.Add("Ş\nŞ"); 
list.Add("*Ş\nŞ"); 

for (int s = 0; s < list.Count; s++) 
{ 
    var diffColor = list.ElementAt(s)[0] == '*'; 
    var txtLength = richTextBox1.Text.Length; 
    var myString = diffColor ? list.ElementAt(s).Substring(1, list.ElementAt(s).Length - 1) : list.ElementAt(s); 

    richTextBox1.AppendText(myString); 

    if (diffColor) 
    { 
     richTextBox1.SelectionStart = txtLength; 
     richTextBox1.SelectionLength = myString.Length; 
     richTextBox1.SelectionColor = Color.Red; 
     richTextBox1.Select(0, 0); 
    } 

    if (s != list.Count - 1) richTextBox1.AppendText("\r\n\r\n"); 
} 
+0

Спасибо, первый код работал. –

 Смежные вопросы

  • Нет связанных вопросов^_^