禁用时更改listview c#的背景颜色

时间:2013-07-04 04:30:47

标签: c# winforms listview .net-2.0

如何在禁用控件时更改C#中Listview控件的背景颜色?

文本框的颜色在禁用时可以更改,但是当禁用列表视图时,它会变为灰色,我们无法对其应用任何颜色。所以有一种方法可以更改Listview控件的背景颜色禁用??

1 个答案:

答案 0 :(得分:3)

我尝试覆盖OnPaintOnPaintBackground,但BackColor仍未改变。即使WM_PAINT可以更改它,但Item backcolor与listview BackColor不同。之前我曾考虑过这个解决方案,虽然它只是某种破解,但它似乎是唯一可行的解​​决方案,整个想法是改为使用Background Image

    Bitmap bm = new Bitmap(listView1.ClientSize.Width, listView1.ClientSize.Height);
    Graphics.FromImage(bm).Clear(listView1.BackColor);
    listView1.BackgroundImage = bm;

如果你想创建自己的ListView支持BackColor处于禁用状态,这里是类:

public class MyListView : ListView {
   public override Color BackColor {
      get { return base.BackColor;}
      set {
        base.BackColor = value;
        if(BackgroundImage == null){
           Bitmap bm = new Bitmap(1,1);
           bm.SetPixel(0,0,value);
           BackgroundImage = bm;
           BackgroundImageTiled = true;
        }
      }
   }
   public override Image BackgroundImage {
      get { return base.BackgroundImage; }
      set {
          base.BackgroundImage = value;
          if(value == null){
            Bitmap bm = new Bitmap(1,1);
            bm.SetPixel(0,0,BackColor);
            BackgroundImage = bm;
            BackgroundImageTiled = true;  
          }
      }
   }
}

如果有人有其他解决方案,我也想知道。