0

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

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

4

1 回答 1

3

我已经尝试过覆盖OnPaintOnPaintBackgroundBackColor仍然没有改变。甚至WM_PAINT可以更改它,但项目背景颜色与列表视图背景颜色不同。我之前想过这个解决方案,虽然它只是某种黑客,但它似乎是唯一可行的解​​决方案,整个想法是使用 aBackground 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;  
          }
      }
   }
}

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

于 2013-07-04T07:52:13.010 回答