Как сохранить цвета текстов в текстовом поле? - PullRequest
0 голосов
/ 12 февраля 2012

Я поместил какой-то цветной текст в мое текстовое поле, используя следующий код:

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

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

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

Поэтому, когда мне нужен RichTextBox, я извлекаю его из своего HashTable, помещаю в него какой-то цветной текст, помещаю его в панель моего UserControl и, наконец, помещаю свой UserControl вФорма моей программы.Мой UserControl фактически может быть временно удален из формы программы, когда пользователь нажимает кнопку, я использую Controls.Remove ().Чтобы вернуть его обратно в форму, я использую Controls.Add ().Проблема в том, что когда пользовательский элемент управления добавляется обратно, тексты 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 кнопки в моей экспериментальной программе, но цвета текста сохраняются.

1 Ответ

4 голосов
/ 12 февраля 2012

Вы не должны использовать Parent свойство, чтобы скрыть, а Visible свойство.

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

РЕДАКТИРОВАТЬ:

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

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

...