Двойная буферизация настраиваемого элемента управления в Compact Framework

У меня есть настраиваемый элемент управления, унаследованный от Panel. В итоге я помещаю на эту панель несколько DataGrids и Labels. Когда он становится слишком длинным, он автоматически прокручивается для меня.

Мне очень нужна прокрутка, потому что это список просканированных объектов, размер которых будет больше, чем позволяет пространство на экране.

Но когда я прокручиваю, он довольно сильно мерцает. Я бы хотел, чтобы он давал мне плавную прокрутку.

Я видел несколько примеров двойного буфера "Compact Framework", но все они являются методами отрисовки с двойной буферизацией (т.е. graphics.DrawString). Мой пользовательский элемент управления сам по себе не рисует. Он просто помещает обычные сетки и метки на панель и позволяет панели раскрашивать их.

Есть ли способ двойного буферизации обычных элементов управления (опять же НЕ нестандартной окраски)?


person Vaccano    schedule 18.02.2011    source источник
comment
Если вы не можете найти ответ на этот вопрос, возможно, есть способ отложить обновления до тех пор, пока элемент управления не закончит перемещение / прокрутку, если это поможет.   -  person Merlyn Morgan-Graham    schedule 18.02.2011


Ответы (1)


Элементы управления Compact Framework не имеют свойства DoubleBuffered или базового механизма двойной буферизации. Его тоже нет возможности добавить.

Единственный способ получить двойную буферизацию - это переопределить отрисовку элемента управления и сделать ее самостоятельно.

person ctacke    schedule 18.02.2011
comment
Спасибо за указатель. Я попытался использовать BitBlt для панели и элементов управления на панели в их методах OnPaint, но это не улучшило искажение прокрутки (оно не так сильно мерцает. Это действительно частичное рисование элементов управления, а окраска слишком медленная и коренастая). ). Мне не приходилось много заниматься с BitBlt с тех пор, как я работал над C ++ (много лет назад). Так что, возможно, я сделал это неправильно. Если у вас есть образец кода, который может помочь с двойной буферизацией, это было бы здорово. - person Vaccano; 19.02.2011