Как исправить мерцание в пользовательских элементах управления - PullRequest
103 голосов
/ 10 апреля 2010

В моем приложении я постоянно перехожу с одного элемента управления на другой. Я создал нет. пользовательских элементов управления, но во время навигации мои элементы управления мерцают. Обновление занимает 1 или 2 секунды. Я пытался установить это

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
or
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); 
SetStyle(ControlStyles.DoubleBuffer, true);

но это не помогло ... Каждый элемент управления имеет одно и то же фоновое изображение с различными элементами управления. Так что решение для этого ..
Спасибо.

Ответы [ 12 ]

0 голосов
/ 02 октября 2012

Нет необходимости в двойной буферизации и прочем, ребята ...

Простое решение ...

Если вы используете интерфейс MDI, просто вставьте приведенный ниже код в основную форму. Это удалит все мерцание со страниц. Однако некоторые страницы, которые требуют больше времени для загрузки, будут отображаться через 1 или 2 секунды. Но это лучше, чем показ мерцающей страницы, на которой каждый элемент появляется один за другим.

Это единственное лучшее решение для всего приложения. Смотрите код для ввода в основной форме:

protected override CreateParams CreateParams {
  get {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    return cp;
  }
} 
0 голосов
/ 10 апреля 2010

Вы пробовали Control.DoubleBuffered Недвижимость?

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

Также это и это может помочь.

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