本人要改变ComboBox在Enabled = false;时Text部分的景色。
据本来跟踪发现,当enabled = false;时。所绘制的字体不是以backColor为背景色。
故不能通过设置BackColor来得到理想结果。
本人尝试过
不知是否有谁知道,可以重载来得之?

解决方案 »

  1.   

    有个事件,就是当enabled属性变时触发的,你在这个事件中改变字体颜色就行了
      

  2.   

    如果enable本来就是false,而不是由true变成false 怎么办。
      

  3.   

    WinFOrm?ComboBox是一个Windows的控件,不是使用.NET的简单类库画出来的,实际上.NET1.1中几乎没有几个是使用.NET绘制的控件说白了,这是直接使用win32API制造的两个办法让你得到你想要的效果:
    1. 完全自己写一个combobox,但是这个要用很多的win32api2. 继承现有分combobox,在它绘制textbox的时候,在textbox上面覆盖一层颜色
      

  4.   

    用Reflector看了一个晚上的.net源码,终于找到问题所在
    楼上所言对了一半。的确,实际上MS是用CreateWindow来创建标准的控件
    它的绘制完全由系统来控件。一般是无法直接通过重载
    OnPaint来解决的,因为你需要设定UsePaint然后才可以激发OnPaint事件,而且
    你必需完全自已来绘制整个控件。
    那么如果你只是想改变一下字体的颜色是否可以呢。答案是可以的
    你需要重载WndProc来直接处理绘图消息
    private static int WM_PAINT =0x000F;
    protected override void WndProc(ref Message m)
    {
            base.WndProc (ref m);
            if(m.Msg == WM_PAINT)
    {
    Graphics g =this.CreateGraphics();
    g.DrawLine(new Pen(Color.Blue), 0,0,100,100);
    g.Dispose();
    }
    }
    上面这段代码就可以简单地绘制一条蓝色的直线。同样也可以重新改变字体的颜色
      

  5.   

    字体颜色?
    lz不是说背景吗?另外,字体颜色不需要这样用msg,直接使用.net的类库就可以了