ReadOnly の TextBox.ForeColor の設定が反映されない現象の対策

TextBox の文字列を編集させたくない場合は TextBox.ReadOnly = true とする。

TextBox のフォントの色は TextBox.ForeColor で設定できる。

TextBox.ReadOnly = true かつ TextBox.ForeColor = 色

の場合、それだけでは色が反映されない。

結論から述べると、TextBox.BackColor も同時に設定してやる必要がある。

背景色を設定する必要がなくても。

普通はまず気づかないと思うが、 TextBox.BackColor を設定していないと、 TextBox.ForeColor はデフォルト値でオーバーライドされてしまうようだ。

参考: [.NET]ReadOnly=TrueのTextBox.ForeColorの設定が反映されない場合の対処法 - 僕らはみんな歪ている

NG

textBox1.ReadOnly = true;
textBox1.ForeColor = Color.Red;

f:id:posnum:20141015213130j:plain

OK

textBox1.ReadOnly = true;
textBox1.ForeColor = Color.Red;
textBox1.BackColor = SystemColors.Control;

f:id:posnum:20141015213145j:plain