2012-02-12 58 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