C# 当添加到表单构造函数时,RichTextBox文本着色具有不同的行为

C# 当添加到表单构造函数时,RichTextBox文本着色具有不同的行为,c#,winforms,richtextbox,C#,Winforms,Richtextbox,我有一个RichTextBox放在表单上,我想添加不同颜色的文本。 我使用它将彩色文本添加到RichTextBox,但是当我将其添加到表单构造函数时,它有一个不同的行为(第一个单词不是彩色的)。 有人能解释这种不同的行为吗 代码如下: richTextBox1.Font = new Font("Consolas", 18f, FontStyle.Bold); richTextBox1.BackColor = Color.AliceBlue; str

我有一个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(" ");
        }
        }
richTextBox1.Font=新字体(“Consolas”,18f,FontStyle.Bold);
richTextBox1.BackColor=Color.AliceBlue;
字符串[]字=
{
“点”,
“净”,
“帕尔斯”,
“是”,
“a”,
“很好”,
“网站。”
};
颜色[]颜色=
{
颜色,浅绿色,
Color.CadetBlue,
颜色,玉米丝,
颜色,金色,
颜色,粉红色,
颜色,薰衣草,
颜色:软呢帽
};
for(int i=0;i

注意:我使用VS2010、.NET 3.5将代码移动到加载事件中,它将工作:

    private void Form1_Load(object sender, EventArgs e)
    {
        colorTbx();
    }

    private void colorTbx()
    {
        //your code here
    }

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

要修复它,只需强制创建句柄。您可以通过请求
句柄
属性来实现这一点

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(" ");

}
var handle=richTextBox1.handle//强制创建句柄
for(int i=0;i
我找不到问题所在,它们在我的解决方案中都有自己的颜色…(你是说“点”的背景没有突出显示?)顺便说一句,richTextBox1.SelectionBackColor=color前面的花括号;在richTextBox1.AppendText(“”)之后;是unnecessary@Lost谢谢你的关注,是的,我指的是“点”的背景。你的意思是在表单构造函数中的代码之前添加这一行吗?不,请参见
var handle=richTextBox1.handle在循环之前。加上那一行。它应该可以工作。@SriramSakthivel谢谢你,它工作了,但我仍然不知道我为什么会有这种行为,它不应该在我初始化组件后创建句柄吗?它在第一次调用
AppendText
时创建
句柄,我也在想为什么会发生这种情况:(我想这是一个bug.)。。