У меня есть приложение, в котором я могу перейти от одного пользовательского элемента управления ко многим пользовательским элементам управления. Когда я переходил ко многим элементам управления, у меня возникали проблемы с мерцанием. Чтобы устранить мерцание, я включил Двойную буферизацию с помощью -
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
Это действительно решило проблему мерцания. Но появилась новая проблема, в которой иногда мой пользовательский элемент управления не прорисован полностью. Появилось черное окно. Чтобы решить эту проблему, мне нужно свернуть и развернуть программное обеспечение, и оно отображается правильно.
Я думаю, что, хотя двойная буферизация рисует все пользовательские элементы управления за один раз, один или несколько пользовательских элементов управления все еще генерируют свои элементы управления. А на момент мастерской росписи этот контроль был не готов.
Вот изображение для правильного понимания -
Как показано на рисунке, в этом конкретном сценарии есть одна форма, содержащая 4 пользовательских элемента управления. Кроме того, каждый пользовательский элемент управления содержит другие элементы управления/пользовательские элементы управления.
Что, вероятно, идет не так в этом вопросе?
Invalidate()
в событииResizeEnd
? - person Sandeep   schedule 09.05.2018Invalidate()
вResizeEvent
для обработки перемещения главного окна. И вызываяInvalidate
в событииMouseUp
для перемещения пользовательского элемента управления. - person Sandeep   schedule 09.05.2018