2013-12-19 13 views
8

Ich schreibe ein Wörterbuch mit C# und ich verwende ein Textfeld, um die Definitionen anzuzeigen. Offensichtlich muss ich die ReadOnly-Eigenschaft auf True festlegen, aber wenn ich das tue, kann ich die Farbe des Texts nicht ändern. Das Ändern der Schriftart funktioniert jedoch einwandfrei. Was soll ich machen?Wie änderst du die Textfarbe einer schreibgeschützten TextBox?

Ich verwende diesen Code und die Einstellung der Farbe arbeitet völlig in Ordnung, wenn die Readonly-Eigenschaft falsch ist, aber nicht ändert, wenn es wahr ist:

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

haben Sie versucht, es auf .enabled = false zu setzen? –

+0

Wenn ich es deaktiviere, funktioniert der Bildlauf nicht. Es gibt also keine Verwendung:/ – Amen

+0

Dies ist tatsächlich auf MSDN dokumentiert (dass die Farbe auf einem ReadOnly-Steuerelement nicht ändert). Aber die Problemumgehung (Ihre akzeptierte Antwort) ist nicht dokumentiert ... außer hier. – davidbak

Antwort

32

Die ForeColor Eigenschaft eines Nur-Lese-TextBox ist aus irgendeinem Grund mit der BackColor-Eigenschaft verheiratet. Also, wenn Sie „kitzeln“, um die Backcolor-Eigenschaft, wird die Eigenschaft ForeColor danach eingestellt:

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

Nun, alle sind jiggered. Das ist eine vernünftige Architektur. Pfui. –

+0

Heilige Dunkelheit, Batman! Das ist nicht offensichtlich! (Seltsamerweise ist das nicht notwendig für 'ResetForeColor'.) – davidbak

+0

Ich bin immer noch verwirrt, wie hast du es geschafft, es herauszufinden? – Rajiv

1

Dank LarsTech Vorschlag hatte ich die Hintergrundfarbe zu setzen und setzte sich dann wieder

Dies ist die Methode dass für mich gearbeitet:

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

Unter der Annahme, die ForeColor bereits auf die gewünschte Farbe (möglicherweise im Designer) gesetzt ist, alles, was getan werden muss, ist:

tb.BackColor = tb.BackColor; 

Dies wird die Vordergrundfarbe auf magische Weise auslösen und fixieren. Ein Kommentar, der erklärt, warum diese Codezeile hinzugefügt wird, wird wahrscheinlich ebenfalls benötigt.

+0

Seltsam, aber wahr in .NET 4.52. –

Verwandte Themen