2013-09-03 1 views
0

Я пытаюсь реплицировать окно журнала, поэтому самый последний журнал должен отображаться в верхней части - наиболее заметным. Таким образом, мне нужно добавить текст в начало (без проблем), но с несколькими цветами (проблема).RichTextBox - добавить текст в начало страницы с несколькими цветами (отображается только последняя строка)

Сначала я сохраняю исходный текст. (это rtf или text - попробовал оба) И затем добавляю новый текст с именем пользователя, а затем сообщением. Имя пользователя должно быть одного цвета, а другое сообщение. Это всегда однослойное.

Все, что я получаю по моему методу, заключается в том, что при добавлении старого текста или старого RTF-текста отображается только последний «журнал».

public void AddLog(Log log) 
{ 
     try 
     { 
      string oldText = this.richTextBox1.Rtf; 

      this.richTextBox1.Text = log.User + ": " + log.Message + "\n"; 
      this.richTextBox1.Select(0, log.User.Length); 
      this.richTextBox1.SelectionColor = Color.GreenYellow; 
      this.richTextBox1.Select(log.User.Length + 2, log.Message.Length); 
      this.richTextBox1.SelectionColor = Color.White; 
      this.richTextBox1.DeselectAll(); 
      this.richTextBox1.Rtf += oldText; 

     } 
     catch { } 
} 

Возможно ли это? Поскольку он не сохраняет старый RTF-текст, а старый текст RTF не может быть добавлен после нового текста, это означает, что я, вероятно, должен добавить новый текст ниже, который не то, что я хочу.

Если вместо сохранения текста «RTF» формат (цвета) исчезнет и отобразит только один цвет.

ответ

2

Не тестировался, но попробовать это

public void AddLog(Log log) 
{ 
    try 
    { 
     richTextBox1.SelectAll();    
     string oldText = this.richTextBox1.SelectedRtf; 

     this.richTextBox1.Text = log.User + ": " + log.Message + "\n"; 
     this.richTextBox1.Select(0, log.User.Length); 
     this.richTextBox1.SelectionColor = Color.GreenYellow; 
     this.richTextBox1.Select(log.User.Length + 2, log.Message.Length); 
     this.richTextBox1.SelectionColor = Color.White; 
     this.richTextBox1.DeselectAll(); 
     this.richTextBox1.SelectionStart = this.richTextBox1.TextLength; 
     this.richTextBox1.SelectedRtf = oldText; 
     this.richTextBox1.DeselectAll(); 

    } 
    catch { } 
} 
+0

Да, я не знаю, что разница в выборе текста SelectedRtf первого или просто скопировать текст .rtf (форматированный текст), а затем добавить его снова. Но это сработало. Все остальные попытки отформатировали текст после добавления нового текста или были странными по какой-либо причине. – Deukalion

+0

Я понимаю, что свойство 'Rtf' дает полный' Rtf format', где 'SelectedRtf' дает часть его. Я скажу, что это повторяется с HTML. '' Rtf' + Rtf' подобен ' sometags sometags2', где 'как вставка SelectedRtf' затрагивает только подмножество так' sometags, sometags2 '. В результате в первом формате приводятся недопустимые данные, где второй нет. :) –

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