2012-02-23 198 views
0

我有一個大面板,裏面有很多子面板。這些子面板內部是兩個帶有透明背景的文本字段。它基本上是從頭開始構建的ListBox。背景顏色變化閃爍

我想要做的是循環每個這些子面板,並將其背景顏色更改爲選定的顏色,當用戶單擊一個。

但是,當我點擊一個新的子面板時,舊的背景顏色和新的背景顏色之間會有一個非常明顯的閃爍。

http://i.imgur.com/ROHYu.png

注:淺藍色是一個突出顯示顏色,當用戶懸停在面板。

我已經嘗試設置DoubleBuffered爲true爲主面板和窗體本身沒有太多的運氣。我也嘗試將ControlStyles.AllPaintingInWmPaint,ControlStyles.UserPaint和ControlStyles.OptimizedDoubleBuffer設置爲true。

public class List : Panel 
{ 
    private Panel[] items; 
    private Label[] header; // Children of items 
    private Label[] footer; // Children of items 

    public List() 
    { 
     SetStyle(ControlStyles.AllPaintingInWmPaint, true); 
     SetStyle(ControlStyles.UserPaint, true); 
     SetStyle(ControlStyles.OptimizedDoubleBuffer, true); 

     AutoScroll = true; 
     BackColor = Color.White; 
     //DoubleBuffered = true; 
     HorizontalScroll.Visible = false; 
     HorizontalScroll.Enabled = false; 
     VerticalScroll.Visible = true; 
     VerticalScroll.Enabled = true; 
    } 

    public void renderItemsSelected(Color color) 
    { 
     for (int q = 0; q < itemsSelected.Count; q++) 
     { 
      int i = getPos(); 

      items[i].BackColor = color; 
     } 
    } 
} 

所以我想知道如果有人有任何想法?

回答