TextBox在Enabled= false时,系统会把ForeColor设置为灰色。
现在要求在Enabled=false时,ForeColor为红色。
-----------------------------------------------------
曾经尝试的办法:
1,
......
base.SetStyle(ControlStyles.UserPaint, true);
......
protected override void OnPaint(PaintEventArgs e)
{
......
e.Graphics.DrawString(base.Text, base.Font, new SolidBrush(ForeColor),
new Rectangle(-1, 1, base.Width, base.Height), sf);
......
}
这样做的问题:由于TextBox完全要自己去绘制,OnPaint里不知道要写些什么。如果只写
上面的代码,会出现一些问题,譬如,输入的时候,字体会变大-_-||2,没有自己绘制,在WndProc里获取WM_PAINT消息。
protected override void WndProc(ref Message m)
{
......
case WM_PAINT:
......
gdc.DrawString(base.Text, base.Font, new SolidBrush(ForeColor),
new Rectangle(-1, 1, base.Width, base.Height), sf);
......
}
这样做字体会有重影,我可以通过改变前面的数字把重影消除,可是不同的操作系统
(譬如,2000 到XP)效果又不一样。请各位大虾帮忙。

解决方案 »

  1.   

    TextBox在Enabled= false时,系统会把ForeColor设置为灰色。
    现在要求在Enabled=false时,ForeColor为红色。
    -----------------------------------------------------
    曾经尝试的办法:
    1,
    ......
    base.SetStyle(ControlStyles.UserPaint, true);
    ......
    protected override void OnPaint(PaintEventArgs e)
    {
    ......
    e.Graphics.DrawString(base.Text, base.Font, new SolidBrush(ForeColor),
    new Rectangle(-1, 1, base.Width, base.Height), sf);
    ......
    }
    这样做的问题:由于TextBox完全要自己去绘制,OnPaint里不知道要写些什么。如果只写
    上面的代码,会出现一些问题,譬如,输入的时候,字体会变大-_-||2,没有自己绘制,在WndProc里获取WM_PAINT消息。
    protected override void WndProc(ref Message m)
    {
    ......
    case WM_PAINT:
    ......
    gdc.DrawString(base.Text, base.Font, new SolidBrush(ForeColor),
    new Rectangle(-1, 1, base.Width, base.Height), sf);
    ......
    }
    这样做字体会有重影,我可以通过改变前面的数字把重影消除,可是不同的操作系统
    (譬如,2000 到XP)效果又不一样。请各位大虾帮忙。TextBox在Enabled= false时,系统会把ForeColor设置为灰色。
    现在要求在Enabled=false时,ForeColor为红色。
    -----------------------------------------------------
    曾经尝试的办法:
    1,
    ......
    base.SetStyle(ControlStyles.UserPaint, true);
    ......
    protected override void OnPaint(PaintEventArgs e)
    {
    ......
    e.Graphics.DrawString(base.Text, base.Font, new SolidBrush(ForeColor),
    new Rectangle(-1, 1, base.Width, base.Height), sf);
    ......
    }
    这样做的问题:由于TextBox完全要自己去绘制,OnPaint里不知道要写些什么。如果只写
    上面的代码,会出现一些问题,譬如,输入的时候,字体会变大-_-||2,没有自己绘制,在WndProc里获取WM_PAINT消息。
    protected override void WndProc(ref Message m)
    {
    ......
    case WM_PAINT:
    ......
    gdc.DrawString(base.Text, base.Font, new SolidBrush(ForeColor),
    new Rectangle(-1, 1, base.Width, base.Height), sf);
    ......
    }
    这样做字体会有重影,我可以通过改变前面的数字把重影消除,可是不同的操作系统
    (譬如,2000 到XP)效果又不一样。请各位大虾帮忙。TextBox在Enabled= false时,系统会把ForeColor设置为灰色。
    现在要求在Enabled=false时,ForeColor为红色。
    -----------------------------------------------------
    曾经尝试的办法:
    1,
    ......
    base.SetStyle(ControlStyles.UserPaint, true);
    ......
    protected override void OnPaint(PaintEventArgs e)
    {
    ......
    e.Graphics.DrawString(base.Text, base.Font, new SolidBrush(ForeColor),
    new Rectangle(-1, 1, base.Width, base.Height), sf);
    ......
    }
    这样做的问题:由于TextBox完全要自己去绘制,OnPaint里不知道要写些什么。如果只写
    上面的代码,会出现一些问题,譬如,输入的时候,字体会变大-_-||2,没有自己绘制,在WndProc里获取WM_PAINT消息。
    protected override void WndProc(ref Message m)
    {
    ......
    case WM_PAINT:
    ......
    gdc.DrawString(base.Text, base.Font, new SolidBrush(ForeColor),
    new Rectangle(-1, 1, base.Width, base.Height), sf);
    ......
    }
    这样做字体会有重影,我可以通过改变前面的数字把重影消除,可是不同的操作系统
    (譬如,2000 到XP)效果又不一样。请各位大虾帮忙。
      

  2.   

    设为lock再后再改色。
    你处理这没有什么意义,只能是浪费系统资源
      

  3.   

    to:codeangel
    我知道你的意思了。
    可是现在一定要设成Enbaled = false,可以吗?
      

  4.   

    Enbaled = false后还可以变色吗?怀疑中...