RichTextBox文本着色在添加到Form构造函数时具有不同的行为

本文关键字:构造函数 文本 添加 Form RichTextBox | 更新日期: 2023-09-27 18:04:19

我有一个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

RichTextBox文本着色在添加到Form构造函数时具有不同的行为

似乎原因是Control的Handle尚未创建。它仅在您第一次调用AppendText时创建。虽然这应该不是问题(如果我找到问题的原因,我会回来的)。

要修复它,只需强制创建handle。您可以通过请求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
    }