2015-10-14 1 views
0

Конфигурация:Формат цвет текста в C# Формы

  • Windows 7
  • .NET 3.5
  • Visual Studio 2008

Резюме: отправка слова в RTB через для цикла; отформатируйте их на основе их содержимого («ОК» отображается зеленым цветом, «неудачно» отображается красным цветом).

Код:

for (int i = 0; i < inputValues.Length; i++) 
{ 
    //checking if the value is OK or not 
    string answer = functionReturningString(inputValues[i], referenceValue); 
    textBox4.Text += answer; //and sending the result string to text box 
} 

Сейчас я просто пытаюсь выбрать строку, которая была добавлена ​​в прошлом и форматировать его на основе его содержания.

textBox4.SelectAll(); 
textBox4.Select(textBox4.SelectedText.Length - answer.Length, answer.Length); 

if (answer == "OK") 
{ 
    textBox4.SelectionColor = Color.Green; 
} else { 
    textBox4.SelectionColor = Color.Red; 
} 

textBox4.Refresh();//I want to see every value as soon as added 
textBox4.Text += "\r\n"; //adding space between words 

Что касается результата, то в конечном счете использовать «SelectionColor» на все слова в RTB.

В: Как я могу убедиться, что ранее отформатированные слова не меняют цвет?

Обновление: Предлагаемое решение также не работает. Слова будут отображаться в их правильном цвете (сначала). Затем добавляется следующее слово и меняется цвет всей ячейки.

+3

http://stackoverflow.com/questions/2527700/change-color-of-text-within-a-winforms-richtextbox/2531177#2531177 –

+0

@Ivan stoev Мне нужно удалить rtb.refresh(), если я использую код, который вы предложили? – Avigrail

+0

Я не уверен, почему бы не попробовать и посмотреть, нужно ли это или нет. –

ответ

1

Последовательность должна быть чем-то вроде этого (если вы начинаете с пустым богатым полем):

richTextBox.SelectionColor = some_Color; 
richTextBox.AppendText(some_Text); 

Вот пример моделирование случая вы описали (если я правильно понял):

using System; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Windows.Forms; 

namespace Tests 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      var form = new Form(); 
      var richTextBox = new RichTextBox { Dock = DockStyle.Fill, Parent = form }; 
      var button = new Button { Dock = DockStyle.Bottom, Parent = form, Text = "Test" }; 
      button.Click += (sender, e) => 
      { 
       Color TextColor = Color.Black, OKColor = Color.Green, FailedColor = Color.Red; 
       var questions = Enumerable.Range(1, 20).Select(n => "Question #" + n).ToArray(); 
       var random = new Random(); 
       richTextBox.Clear(); 
       for (int i = 0; i < questions.Length; i++) 
       { 
        richTextBox.SelectionColor = TextColor; 
        richTextBox.AppendText(questions[i] + ":"); 
        bool ok = (random.Next() & 1) != 0; 
        richTextBox.SelectionColor = ok ? OKColor : FailedColor; 
        richTextBox.AppendText(ok ? "OK" : "Failed"); 
        richTextBox.SelectionColor = TextColor; 
        richTextBox.AppendText("\r\n"); 
       } 
      }; 
      Application.Run(form); 
     } 
    } 
} 

который производит следующую

enter image description here

+0

Ничего себе, этот работает просто отлично! Я не знал, что вы можете делать такие вещи (хорошо? «ОК»: «Сбой») Спасибо большое :) – Avigrail