У меня есть RichTextBox, размещенный на форме, и я хочу добавить к нему другой текст с разными цветами. Я использовал этот код для добавления цветного текста в RichTextBox, но он имеет другое поведение, когда я добавляю его в конструктор формы (первое слово не окрашено). может ли кто-нибудь объяснить это различное поведение?
Здесь код:
richTextBox1.Font = new Font("Consolas", 18f, FontStyle.Bold);
richTextBox1.BackColor = Color.AliceBlue;
string[] words =
{
"Dot",
"Net",
"Perls",
"is",
"a",
"nice",
"website."
};
Color[] colors =
{
Color.Aqua,
Color.CadetBlue,
Color.Cornsilk,
Color.Gold,
Color.HotPink,
Color.Lavender,
Color.Moccasin
};
for (int i = 0; i < words.Length; i++)
{
string word = words[i];
Color color = colors[i];
{
richTextBox1.SelectionBackColor = color;
richTextBox1.AppendText(word);
richTextBox1.SelectionBackColor = Color.AliceBlue;
richTextBox1.AppendText(" ");
}
}
Примечание. Я использую VS2010,.NET 3.5
Кажется, причина в том, что Control Handle
еще не создана. Он создается только при первом вызове AppendText
. хотя это не должно быть проблемой (я вернусь, если найду, почему это проблема).
Чтобы исправить это, просто заставьте создать дескриптор. Вы делаете это, запрашивая свойство Handle
.
var handle = richTextBox1.Handle;//Force create handle
for (int i = 0; i < words.Length; i++)
{
string word = words[i];
Color color = colors[i];
richTextBox1.SelectionBackColor = color;
richTextBox1.AppendText(word);
richTextBox1.SelectionBackColor = Color.AliceBlue;
richTextBox1.AppendText(" ");
}
Переместите код в событие Load, и он будет работать:
private void Form1_Load(object sender, EventArgs e)
{
colorTbx();
}
private void colorTbx()
{
//your code here
}
var handle = richTextBox1.Handle;
перед петлей. Добавьте эту строку. Он должен работать.