2013-12-19 1 views
8

私はC#で辞書を書いています。定義を表示するためにテキストボックスを使っています。明らかに、ReadOnlyプロパティをtrueに設定する必要がありますが、それを行うとテキストの色を変更できません。しかし、フォントを変更しても問題ありません。私は何をすべきか?それが真であるとき読み取り専用TextBoxのテキストの色はどのように変更しますか?

私はこのコードを使用し、ReadOnlyプロパティがfalseの場合、色を設定することは完全に正常に動作しますが、変更されませんよ:

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

読み取り専用のTextBoxのForeColorプロパティ何らかの理由でBackColorプロパティと結婚しています。ですから、BackColorプロパティを「くすぐる」ならば、それは後にForeColorプロパティを設定します:私はバックの色を設定し、これがメソッドである再び

それを設定する必要がありましたLarsTech提案へ

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

感謝それは私のために働い:

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

ForeColorプロパティがすでに(おそらくデザイナーで)所望の色に設定されていると仮定すると、実行する必要があるものすべてがある:

tb.BackColor = tb.BackColor; 

これは魔法のように前景の色をトリガして修正します。このコード行がなぜ追加されたのかを説明するコメントもおそらく必要です。

+0

奇妙ですが、.NET 4.52では真です。 –

関連する問題