У меня есть большая панель с множеством дочерних панелей внутри нее. Внутри этих дочерних панелей находятся два текстовых поля с прозрачным фоном. Это, по сути, ListBox, построенный с нуля.Мерцание на смене цвета фона
То, что я пытаюсь сделать, - это пропустить каждую из этих дочерних панелей и изменить цвет фона на выбранный цвет, когда пользователь нажмет на него.
Однако, когда я нажимаю на новую дочернюю панель, между старым цветом фона и новым цветом фона появляется очень заметное мерцание.
Примечание: светло-голубой цвет является выделение цветом, когда пользователь парит над панелью.
Я пробовал настройку 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;
}
}
}
Так что мне было интересно, есть ли у кого-нибудь идеи?
Включение двойной буферизации для каждого элемента в массиве «items». Благодарю. – Khronos