Как вы меняете цвет текста только для чтения TextBox?

Я пишу словарь с С#, и я использую текстовое поле для отображения определений. Очевидно, мне нужно установить для свойства ReadOnly значение true, но когда я это сделаю, я не могу изменить цвет текста. Однако изменение шрифта отлично работает. Что мне делать?

Я использую этот код, и настройка цвета работает отлично, когда свойство ReadOnly является ложным, но не изменяется, когда оно истинно:

    private void button5_Click(object sender, EventArgs e)
    {
        FontDialog fd = new FontDialog();
        fd.ShowColor = true;
        if (fd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            textBox3.Font = fd.Font;
            textBox3.ForeColor = fd.Color;
        }
    }

Ответ 1

Свойство ForeColor текстового Text-модуля, доступного только для чтения, по какой-либо причине выходит замуж за свойство BackColor. Поэтому, если вы "пощекотите" свойство BackColor, после этого он установит свойство ForeColor:

FontDialog fd = new FontDialog();
fd.ShowColor = true;
if (fd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
  textBox3.Font = fd.Font;
  textBox3.BackColor = textBox3.BackColor;
  textBox3.ForeColor = fd.Color;
}

Ответ 2

Благодаря предложению LarsTech мне пришлось установить задний цвет, а затем снова установить его

Это метод, который работал у меня:

    tb.BackColor = Color.Black
    tb.ForeColor = Color.Black
    tb.BackColor = Color.White

Ответ 3

Предполагая, что ForeColor уже установлен на нужный цвет (возможно, в дизайнере), все, что нужно сделать, это:

tb.BackColor = tb.BackColor;

Это волшебное срабатывание и исправление цвета переднего плана. Хотя комментарий, объясняющий, почему эта строка кода добавлена, вероятно, также необходима.

Ответ 4

В VS 2017 это даже не нужно.

В дизайнере, если вы установили ForeColor и BackColor по своему желанию и хотите переключить ReadOnly на вашем TextBox на True

  • Измените BackColor на любой случайный цвет и скомпилируйте
  • Измените BackColor на нужный вам цвет и скомпилируйте