【发布时间】:2012-02-15 19:50:04
【问题描述】:
我使用以下代码在富文本框中添加了一些彩色文本:
richTextBox1.SelectionColor = Color.Blue;
richTextBox1.SelectedText = "Name";
richTextBox1.SelectionColor = Color.Black;
richTextBox1.SelectedText = ": some message.";
但是当我通过将它的父属性设置为 null 来隐藏用户的富文本框(我有这个面板不时保存不同的富文本框)并将它放回去时,富文本框不保留文本我应用的颜色。所有文本都变成黑色。
更新:我尝试了一个实验。在我的主程序中,我有一个 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;
}
}
usercontrol1 的 ChatLog 属性是这样的:
public Control ChatLogPanel
{
get
{
return panel1.Controls[0];
}
set
{
panel1.Controls.Clear();
panel1.Controls.Add(value);
}
}
我在我的实验程序中随机点击了 3 个按钮,但文字颜色被保留了。
【问题讨论】:
-
将
Parent属性设置为null确实是一种非常奇怪的“隐藏”控件的方式。你是从哪里学来这种技术的?为什么你更喜欢将Visible设置为false? -
我这样做的原因是因为我不只是隐藏控件(在我的例子中是 RichTextBox)。这是因为我有不同的 RichTextBoxes,我根据情况需要一次显示一个。因此,当我实际从面板中删除一个富文本框时,我创建了另一个富文本框。
-
一个面板可以包含多个控件,因此将所有 RichTextBox 控件添加到面板中,然后通过切换
Visible属性有选择地隐藏/显示它们是没有问题的。 -
我需要面板一次只显示一个富文本框,填满整个面板。
-
切换
Visible属性意味着其他属性将不可见。填充整个面板与此无关,由Dock属性处理。将其设置为DockState.Fill,使其充满整个面板。
标签: c# winforms richtextbox