У меня есть приложение, которое показывает данные (фондовый рынок) в пользовательском элементе управления, сделанном мной. В моем приложении может быть несколько пользовательских элементов управления на одном экране для анализа нескольких акций. Учитывая эту функциональность, пользователь может перемещаться от одного элемента управления к нескольким элементам управления на экране. Эта функциональность вызывала мерцание. Чтобы решить проблему мерцания, я использовал двойную буферизацию, которая была включена с помощью приведенного ниже кода:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
Этот приведенный выше код определенно помог устранить проблему мерцания. Но возникла еще одна проблема: иногда в этом пользовательском элементе управления появляется черное окно. Все, что я нашел идеальным в потоке кода, но не смог выяснить причину этого черного окна.
Удаление двойной буферизации дает правильный результат, но снова появляется мерцание.
Вот изображение для лучшего понимания проблемы -
Control.SetStyle()
добавитьControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true
- person Jimi   schedule 02.05.2018