Раскраска текста RichTextBox имеет другое поведение при добавлении в конструктор Form

1

У меня есть 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

Теги:
winforms
richtextbox

2 ответа

2
Лучший ответ

Кажется, причина в том, что 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(" ");

}
  • 0
    Вы имеете в виду добавление этой строки перед кодом в конструкторе формы?
  • 0
    Нет, просто посмотрите var handle = richTextBox1.Handle; перед петлей. Добавьте эту строку. Он должен работать.
Показать ещё 2 комментария
1

Переместите код в событие Load, и он будет работать:

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню