2012-02-23 3 views
0

У меня есть большая панель с множеством дочерних панелей внутри нее. Внутри этих дочерних панелей находятся два текстовых поля с прозрачным фоном. Это, по сути, ListBox, построенный с нуля.Мерцание на смене цвета фона

То, что я пытаюсь сделать, - это пропустить каждую из этих дочерних панелей и изменить цвет фона на выбранный цвет, когда пользователь нажмет на него.

Однако, когда я нажимаю на новую дочернюю панель, между старым цветом фона и новым цветом фона появляется очень заметное мерцание.

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

Примечание: светло-голубой цвет является выделение цветом, когда пользователь парит над панелью.

Я пробовал настройку DoubleBuffered для истины для главной панели и самой формы без большой удачи. Я также попытался установить 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; 
     } 
    } 
} 

Так что мне было интересно, есть ли у кого-нибудь идеи?

ответ

2

Смотрите мой ответ здесь:

WinForms - Does the Form.DoubleBuffered property influence controls placed on that form?

В принципе, установка DoubleBuffered на родительский элемент управления не просачивания дочерних элементов управления. Попробуйте взломать, что я предложил в этом ответе, посмотрите, работает ли это для вас.

+0

Включение двойной буферизации для каждого элемента в массиве «items». Благодарю. – Khronos

Смежные вопросы