Здравствуйте, mka, Вы писали:
mka>Помогите пожалуйста решить проблему.
mka>Дано:
mka>1. Есть контрол, который содержит дочерние элементы.
mka>2. Каждому дочерниму контролу назначено свойство Dock.
mka>3. Дочерние контролы размещаются на родительском контроле согласно Dock-логике
mka>4. Один из дочерних контролов (конкретно WebBrowser c большим объемом текста) при обновлении своего окна сильно тормозит и блокирует поток GUI.
mka>Проблема: при изменении размера родительского контрола окно перерисовывается неоднородно, а именно дочерние контролы изменяют свои размеры согласно Dock-логике последовательно, просматриваются промежуточные состояния.
mka>Вопрос: какие существуют способы однородной прорисовки родительского контрола?
mka>Личные соображения: рисовать в память, а потом подгружать на экран.
mka>Заранее благодарен.
Я для преодоление как раз такой штуки, а так же для ускорения работы (200 "контролов" на UserControl), написал библиотеку легковесных контролов, так что вызываею Invalidate() для хостового "тяжёлого" контрола при малейшем чихе. Вызывать Invalidate() мы можем сколько угодно, а реально всё будет перерисовано один раз, причём именно там, где нужно. Только вот беда: трудоёмкая реализация, например, скроллбар делал один рабочий день, ещё день — table layout. Зато есть большой плюс: можно класть неограниченное число различных Layout-ов, при этом никаких Bounds расчитывать не приходится. Например, сделал кнопку без текста, зато в неё можно добавить LightFlowLayout, в котором уже находится LightPictureBox, LightTextBox, и вообще, что угодно, при этом кнопка автоматически примет ровно такой размер, чтобы вписать это содержимое. Скроллбар — это TableLayout, на котором по краям лежат ScrollBarArrow, в центре ScrollBarTrack, в внутри ScrollBarTrack — ScrollBarThumb.
Если рисовать всё в память то возникнет проблема с обработкой событий мыши. А это так же трудоёмко, как и написание библиотеки легковесных контролов. Могу только посоветовать поискать готовую реализацию.
Нужно носить в себе еще хаос, чтобы быть в состоянии родить танцующую звезду.