У меня есть большая панель со многими дочерними панелями внутри.Внутри этих дочерних панелей находятся два текстовых поля с прозрачным фоном.По сути, это ListBox, созданный с нуля.
То, что я пытаюсь сделать, это циклически проходить по каждой из этих дочерних панелей и менять цвет фона на выбранный, когда пользователь нажимает на одну из них.
Однако, когда я нажимаю на новую дочернюю панель, между старым цветом фона и новым цветом фона появляется очень заметное мерцание.
![http://i.imgur.com/ROHYu.png](https://i.stack.imgur.com/JaOi7.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;
}
}
}
Поэтому мне было интересно, есть ли у кого-нибудь идеи?