如何在富文本框中保留文本的颜色?

时间:2012-02-12 10:48:58

标签: c# winforms richtextbox

我使用以下代码将一些彩色文本放入我的富文本框中:

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

但是当我通过将其parent属性设置为null来隐藏用户的richtextbox时(我有这个面板不时包含不同的富文本框),并将其放回去,富文本框不会保留文本我应用的颜色。所有文字都变黑了。

更新:我尝试了一个实验。在我的主程序中,我有一个UserControl(有一个Panel),我在其中放置了带有彩色文本的RichTextBox。我有很多RichTextBox,我将它存储到HashTable。

所以当我需要一个RichTextBox时,我从HashTable中检索它,将一些彩色文本放入其中,将它放在我的UserControl面板中,最后将我的UserControl放到我程序的Form中。当用户点击按钮时,我的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;
}
}  

usercontrol1的ChatLog属性是:

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

我在实验程序中随机单击了3个按钮,但保留了文本颜色。

1 个答案:

答案 0 :(得分:4)

您不应使用Parent属性来隐藏,而应使用Visible属性。

如果使用richTextBox.Visible = false隐藏richtextbox,则会保留其格式(已测试)。

编辑:

如下面的评论所述,我建议您只使用一个RichTextBox并在Rtf(或Dictionary)中存储多个Hashtable字符串,以模仿存在不同的RichTextBox'es。

我的意思是Here