Как предотвратить перерисовку управляемой формы winform при программном изменении размера?

У меня есть проект winforms .net 4.0, в котором мне нужно программно установить границы (иначе размер) окна (System.Windows.Forms.Form) и добавить/удалить элементы управления в/из него, в то же время, без видимого мерцания . Размер формы не изменяется пользователем, единственное место, где ее размер изменяется, это вызов this.Bounds = foo / this.DesktopBounds = foo / ....

Я уже читал о предотвращении мерцания с помощью отправки WM_SETREDRAW с помощью p/invoke, а также о SuspendRedraw/SuspendLayout и др. Я все еще вижу, как происходит мерцание, и прибил проблему к:

Windows перерисовывает форму при установке ее границ/размера, даже если перерисовка отключена.

Я предполагаю, что это вызвано не самой формой, а каким-то оконным менеджером?

Итак, есть ли способ абсолютно предотвратить перерисовку чего-либо при любых обстоятельствах, а затем повторно включить перерисовку и обновление вручную после этого? Типа «заморозить окно и отобразить снимок», изменить материал и «заменить снимок обновленным окном (включая положение и размер) за один раз»?

Спасибо, ура, Тим


person Dr. Tim dos Santos    schedule 06.11.2012    source источник


Ответы (1)


Используйте свойство ResizeRedraw формы. Установите его на ложь.

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.resizeredraw.aspx

После этого вам также потребуется перерисовать окно вручную.

person Yván Ecarri    schedule 06.11.2012
comment
Спасибо! К сожалению, я уже пробовал это свойство (забыл упомянуть в OP). Мне также может понадобиться добавить, что я использую компоненты DevExpress; они переопределяют форму (XtraForm) - может ли это быть частью проблемы (что они каким-то образом переопределяют свойства SuspendDraw/ResizeRedraw/...)? - person Dr. Tim dos Santos; 07.11.2012