如何更改只读TextBox的文本颜色?

时间:2013-12-19 17:49:38

标签: c#

我正在用c#编写一本字典,我正在使用文本框来显示定义。显然,我需要将ReadOnly属性设置为true,但是当我这样做时,我无法更改文本的颜色。但是更改字体可以正常工作。我该怎么办?

我正在使用此代码,并且当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;
        }
    }

4 个答案:

答案 0 :(得分:42)

由于某种原因,只读TextBox的ForeColor属性与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;
}

答案 1 :(得分:2)

假设ForeColor已经设置为所需的颜色(可能在设计师中),所有需要做的就是:

tb.BackColor = tb.BackColor;

这将神奇地触发并修复前色。虽然可能还需要解释为什么添加这行代码的注释。

答案 2 :(得分:1)

感谢LarsTech建议我必须设置背面颜色,然后重新设置

这是对我有用的方法:

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

答案 3 :(得分:1)

在VS 2017中甚至不需要。

在设计器中,如果您已根据需要设置了ForeColor和BackColor并希望将TextBox上的ReadOnly切换为True

  • 将BackColor更改为任意颜色并进行编译
  • 将BackColor更改为所需的颜色并进行编译