日期:2014-05-18  浏览次数:20971 次

只读控件的颜色
各种控件 如 TextBox 、ComboBox、CheckBox、RadioButton、DateTimePicker等,一旦设置了Enabled=false后,均变成了灰色背景、灰色字体,如程序中需要读取大量的数据到这些控件中,如设置只读的话,尽是些灰色的控件,太难看了!!
个别控件如TextBox可以设置BackColor为白色,但不能字体颜色怎么设都是灰色,而其他控件更是连背景都设不了。
请高手指点!现正急需解决!!!!
谢谢!!!!!


------解决方案--------------------
还有一种无耻的重写办法, 
虽说我觉得可能会出问题。

但是还是贴出来大家研究下吧。
我不知道会不会可能在某种情况下导致死循环。
毕竟我是在Paint里面设置Enable可能导致刷新的。
可能的意思是: 我没碰到, 但不代表不存在。

public class MyTextBox : TextBox
{
protected override void OnPaint(PaintEventArgs e)
{
this.SuspendLayout();
this.Enabled = false;
base.OnPaint(e);
this.Enabled = true;
this.ResumeLayout();
}
}
------解决方案--------------------
汗, 刚才的代码写反了。。
我对这个问题的看法是:
如果真的是禁止输入, 那么既然Disable的颜色已经成为一种习惯, 那么大家应该没什么不可接受的吧?
刚和公司架构谈了下这个问题, 他的看法是, 
Onpaint其实是一种很“歪门邪道”的走法, 
彻底重写实在是不可想象的。甚至有些的画法不写在Onpaint里面怎么办?
然后他给出一个疑问:
既然是展示而不是输入, 为什么会用到ComboBox和DateTimePicker之类的控件?
难道界面是可以选择展示和输入两种模式么?

如果真的这个需求很强烈, 你可以考虑下InputMan
有专门的属性是做这个的。

p.s. 打个小广告。。 GrapeCity出品。。
------解决方案--------------------
给你个思路试试:
处理这类控件的Enter事件,在事件中把焦点指定给别的控件。
比如界面上有一个button按钮,你可以在TextBox控件的Enter事件中
写:this.button.Focus();

如果要根据特定的条件来设置TextBox这类控件的只读属性的话
就在用一个全局bool变量来控件,在Enter事件中做下判断

以上方法感觉可行,但没有验证,楼主自己试试吧
------解决方案--------------------
关注 ing...