当Enabled设置为false时,我的RichTextBox会更改背景颜色

时间:2010-10-30 16:08:55

标签: c# winforms

如何在禁用(即Enabled = false)RichTextBox上将背景颜色和字体颜色设置为“正常”?

由于

3 个答案:

答案 0 :(得分:3)

Windows用户界面指南要求禁用已禁用的控件。显而易见的好处是,用户可以判断将鼠标悬停在控件上是没有意义的,尝试将焦点设置为它。与工具箱中的所有控件一样,RichTextBox也实现了此指南。覆盖其绘画行为是不切实际的。考虑ReadOnly属性。

答案 1 :(得分:1)

模拟被禁用的属性。实现一个属性,当设置为false时,控件将不会获得焦点或忽略所有键击。 在我看来很奇怪,但程序员想要程序员想要的东西! ; - ]

答案 2 :(得分:1)

我会创建一个继承自RichTextBox的新控件。您可以覆盖BackColor属性以始终返回类似白色的内容。可以使用字体颜色完成类似的操作。我认为你可以做一些事情,比如:

class CustomRichTextBox : System.Windows.Forms.RichTextBox {
     public override System.Drawing.Color BackColor {
          get { return System.Drawing.Color.White; }
          set { base.BackColor = System.Drawing.Color.White; }
     }
}

虽然这可能不起作用,因为您可能必须重写OnPaint方法以绕过默认的灰色行为。

另一种选择是简单地使用readonly属性。 ReadOnly与enabled = false几乎相同,只是您仍然可以在文本框中单击(您无法编辑它)。当它只读时,你仍然可以控制正常的颜色属性,而不必覆盖任何东西。

如果您想要更具创意,可以在RichTextBox的Enter事件中添加一个委托,将焦点设置为其他控件,以防止用户甚至点击该框(启用后不会让您做)