2013-12-19 2 views
8

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

Я использую этот код и настройки цвета отлично работает, когда 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; 
     } 
    } 
+0

Вы пробовали установить его в .enabled = false? –

+0

Если я отключу его, прокрутка не будет работать. поэтому нет необходимости:/ – Amen

+0

Это фактически документировано на MSDN (что цвет не изменяется на элементе ReadOnly). Но обходной путь (ваш принятый ответ) не задокументирован ... кроме здесь. – davidbak

ответ

32

ForeColor свойство TextBox только для чтения по какой-либо причине женат на собственности 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; 
} 
+0

Ну, все будет смешно. Это разумная архитектура. Тьфу. –

+0

Святое невежество, Бэтмен! Это неочевидно! (Как ни странно, это не обязательно для 'ResetForeColor'.) – davidbak

+0

Я все еще озадачен, как вам удалось это понять? – Rajiv

1

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

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

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

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

tb.BackColor = tb.BackColor; 

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

+0

Странно, но это правда в .NET 4.52. –

Смежные вопросы