2012-02-12 59 views
0

我把一些彩色文本到我的丰富的文本框我用下面的代码:如何在富文本框中保留文本的颜色?

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

但是当我通过它的parent属性设置为NULL用户隐藏RichTextBox的(我有这种面板拥有不同丰富文本框),并放回去,富文本框不保留我应用于它的文本颜色。所有文本都变黑。

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

所以,当我需要一个RichTextBox,我从我的HashTable中检索它,把一些彩色文本放到它里面,把它放在我的UserControl面板中,最后把我的UserControl放到我的程序的Form中。当用户单击按钮时,我的用户控件实际上可以暂时从程序的表单中删除,我使用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个按钮随机在我的实验方案,但文本颜色被保留下来。

+0

设置'Parent'属性'null'是“隐藏”控制的一个非常奇怪的方式,确实是一个例子。你从哪里学习这种技术?你为什么喜欢把'Visible'设置为'false'? – 2012-02-12 11:12:24

+0

我这样做的原因是因为我不只是隐藏控件(在我的情况下是一个RichTextBox)。这是因为我有不同的RichTextBoxes,我根据情况需求一次显示一个RichTextBox。所以当我实际上从我创建的面板中删除一个富文本框来添加另一个。 – Xel 2012-02-12 11:51:35

+0

面板可以包含多个控件,因此将所有RichTextBox控件添加到面板并没有问题,然后通过切换“Visible”属性来选择性地隐藏/显示它们。 – 2012-02-12 11:59:02

回答

4

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

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

编辑:

在下面的评论中所讨论的,我建议你只有一个RichTextBox使用和存储几个Rtf串在Dictionary(或Hashtable)模仿不同RichTextBox“ES的存在。

我的意思,可以发现Here

+0

我不能用这个来满足我的需求。其实我不只是想隐藏一个富文本框。我从它的父级(面板)中删除富文本框的原因是因为我需要在该面板中放置另一个富文本框。所以我不能使用这个。 – Xel 2012-02-12 12:40:14

+0

@谢尔:我读过你更新的问题。国际海事组织创建一个richtextbox时,只需将其添加到面板'Visible = false'。然后,你只需要让你看到你需要的东西,并使其他东西看不见。 – digEmAll 2012-02-12 12:54:42

+3

@Xel:顺便说一句,我认为没有必要将所有这些richtextboxes保存在散列表中。你可以将文本和格式一起保存(也就是'richtextbox.Rtf'字符串属性),并将它传递给一个richtextbox。所以你可以避免显示/隐藏问题... – digEmAll 2012-02-12 12:56:41