2012-02-12 3 views
0

я ставлю некоторые цветной текст моего богатого текстового поля моих, используя следующий код:Как сохранить цвета текста в насыщенном текстовом поле?

richTextBox1.SelectionColor = Color.Blue; 
richTextBox1.SelectedText = "Name"; 
richTextBox1.SelectionColor = Color.Black; 
richTextBox1.SelectedText = ": some message."; 

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

Обновление: Я попробовал эксперимент. В моей основной программе у меня есть UserControl (у которого есть панель), где я помещал RichTextBox с цветным текстом. У меня есть много RichTextBoxes, которые я храню в HashTable.

Поэтому, когда мне нужен RichTextBox, я извлекаю его из своего HashTable, вставляю в него цветной текст, помещаю его в панель UserControl и, наконец, добавляю свой UserControl в форму моей программы. Мой UserControl может быть временно удален из формы программы, когда пользователь нажимает кнопку, я использую Controls.Remove(). Чтобы вернуть его в мою форму, я использую Controls.Add(). Проблема в том, что когда UserControl добавляется обратно, тексты RichTextBox больше не раскрашены.

Я попытался сделать что-то подобное в другой экспериментальной программе.

public partial class Form1 : Form 
{ 

private chat.UserControl1 ChatWindowKuno = new chat.UserControl1(); 
private Hashtable htChatLogs = new Hashtable(30); 

public Form1() 
{ 
    InitializeComponent(); 
    createRTBox(); 
} 

private void createRTBox() 
{ 
    RichTextBox richTextBox1 = new RichTextBox(); 
    richTextBox1.Multiline = true; 
    richTextBox1.Dock = DockStyle.Fill; 
    richTextBox1.ReadOnly = true; 
    richTextBox1.BackColor = SystemColors.Window; 
    htChatLogs.Add("Basta", richTextBox1); 
}   

private void button1_Click_1(object sender, EventArgs e) 
{ 
    if (ChatWindowKuno.Parent == null) 
     ChatWindowKuno.Parent = tabPage2; 
    else 
     ChatWindowKuno.Parent = null; 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    // Clear all text from the RichTextBox; 

    RichTextBox richTextBox1 = (RichTextBox)htChatLogs["Basta"]; 

    richTextBox1.Clear(); 

    richTextBox1.SelectionFont = new Font("Segoe UI", 8.25F, FontStyle.Regular); 
    richTextBox1.SelectionColor = Color.Blue; 
    richTextBox1.SelectedText = "Xel"; 
    richTextBox1.SelectionColor = Color.Black; 
    richTextBox1.SelectedText = ": Listening to Be My Last by Utada Hikaru."; 
    richTextBox1.SelectionColor = Color.Gray; 
    richTextBox1.SelectionFont = new Font("Segoe UI", 8.25F, FontStyle.Italic); 
    richTextBox1.SelectedText = " [5:56pm] \n"; 

    richTextBox1.SelectionColor = Color.Gray; 
    richTextBox1.SelectedText = "[5:56pm] "; 
    richTextBox1.SelectionFont = new Font("Segoe UI", 8.25F, FontStyle.Regular); 
    richTextBox1.SelectionColor = Color.Blue; 
    richTextBox1.SelectedText = "Xel"; 
    richTextBox1.SelectionColor = Color.Black; 
    richTextBox1.SelectedText = ": Listening to Be My Last by Utada Hikaru."; 

} 

private void button3_Click(object sender, EventArgs e) 
{ 
    RichTextBox richTextBox1 = (RichTextBox)htChatLogs["Basta"]; 
    ChatWindowKuno.ChatLog = richTextBox1; 
} 
} 

ChatLog свойство UserControl1 это:

public Control ChatLogPanel 
    { 
     get 
     { 
      return panel1.Controls[0]; 
     } 
     set 
     { 
      panel1.Controls.Clear(); 
      panel1.Controls.Add(value); 
     } 
    } 

я нажимаю кнопки 3 случайно в моей экспериментальной программе, но цвета текста сохраняются.

+0

Установка 'Parent' свойство' null' очень странный способ «скрывается» контроль, действительно. Откуда вы узнали эту технику? И почему вы предпочитаете это, устанавливая 'Visible' на' false'? –

+0

Причина, по которой я делаю это, заключается в том, что я не просто скрываю элемент управления (RichTextBox в моем случае). Это потому, что у меня разные RichTextBoxes, которые я показываю по одному в зависимости от ситуации. Поэтому, когда я фактически удаляю одно богатое текстовое поле с панели, которую я создал, чтобы добавить к ней еще одну. – Xel

+0

Панель может содержать несколько элементов управления, поэтому нет никаких проблем с добавлением всех элементов управления RichTextBox к панели, а затем выборочно скрывать/показывать их, переключая свойство «Видимый». –

ответ

4

Нельзя использовать Parent, чтобы скрыть, но Visible собственности.

Если вы спрячете richtextbox с помощью richTextBox.Visible = false, он сохраняет свое форматирование (тестирование).

EDIT:

, как описано в комментариях ниже, я предлагаю вам использовать только один RichTextBox и хранить несколько Rtf строк в Dictionary (или Hashtable), чтобы имитировать существование различных RichTextBox «эс.

Пример того, что я имею в виду, можно найти Here

+0

Я не могу использовать это для своих нужд. Я на самом деле не просто пытаюсь скрыть богатое текстовое поле. Причина, по которой я удаляю богатое текстовое поле из его родителя (панели), заключается в том, что мне нужно разместить еще одно богатое текстовое поле на этой панели. Поэтому я не могу использовать это. – Xel

+0

@Xel: Я прочитал ваш обновленный вопрос. IMO всякий раз, когда создается richtextbox, просто добавьте его в панель с помощью 'Visible = false'. Затем вам просто нужно сделать видимым тот, который вам нужен, и сделать невидимыми другие. – digEmAll

+3

@Xel: Кстати, я думаю, что нет необходимости хранить все эти richtextboxes в хэш-таблице. Вы можете просто сохранить текст вместе с форматированием (AKA - свойство string 'richtextbox.Rtf') передать его одному файлу richtextbox. Поэтому вы можете избежать проблемы show/hide ... – digEmAll

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