Как остановить элементы управления от подергивания при изменении их левого положения и ширины? - PullRequest
3 голосов
/ 01 декабря 2008

У меня есть элемент управления, который пользователь может изменить с помощью мыши. Когда они двигаются по правой стороне, я просто меняю ширину, и все работает нормально.

Однако, когда они перемещают левый размер, я должен изменить свойства Left и Width. Правая часть элемента управления заметно дергается, показывая старую ширину в новой позиции.

Это все еще дергается, если я устанавливаю и левую и ширину одновременно, используя Bounds; использовать или нет SetStyle с любым из UserPaint, Opaque, OptimizedDoubleBuffer, AllPaintingInWmPaint или ResizeRedraw; и является ли это двойной буферизацией. Он все еще дергается, если я вызываю SuspendLayout () / ResumeLayout () для элемента управления или его родителя.

Как остановить элементы управления от подергивания при изменении их левого положения и ширины?

Ответы [ 3 ]

5 голосов
/ 01 декабря 2008

Вы можете попробовать позвонить Control.SuspendLayout() в содержащей форме, прежде чем перемещать / изменять размер, затем Control.ResumeLayout().

Звучит так, что независимо от того, в каком режиме вы устанавливаете элемент управления, какое-то событие, которое срабатывает при изменении границ, перерисовывает его до того, как будут установлены оба значения. Это может быть связано с формой.

РЕДАКТИРОВАТЬ: Я видел этот аналогичный вопрос на SO, вы упомянули, что вы уже использовали SetStyle (), но, возможно, есть некоторая комбинация опций, которые вы можете выбрать, что даст вам желаемый эффект.

Надеюсь, это поможет!

0 голосов
/ 02 декабря 2008

Вместо изменения размера в реальном времени, возможно, лучше будет показать прямоугольник sizer / ghost. Затем, когда пользователь подключится, измените размер элемента управления один раз.

Вот статья, объясняющая метод Win32 / C ++.
http://www.dotnetheaven.com/Uploadfile/amitnabarro/resize_rt04082005085351AM/resize_rt.aspx

Возможно, вы сможете использовать объект Graphics контейнера управления для рисования ограничивающего прямоугольника без мерцания.

0 голосов
/ 02 декабря 2008

Может ли это помочь? http://richardsbraindump.blogspot.com/2007/09/how-to-create-flicker-free.html

Я не знаю, использовали ли вы SetStyle с этими параметрами.

Если это не поможет, я удалю ответ, в противном случае я добавлю фрагмент кода из URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...