2011-02-18 50 views
1

我有一个自定义控件,从Panel继承。我最终在这个面板上放了几个DataGrid和标签。当它变得太长时,它会自动为我滚动。双缓冲精简框架中的自定义控件

我真的需要滚动,因为它是一个扫描对象的列表,它会变得比屏幕上允许的空间大。

但是当我滚动它闪烁很多。我很乐意让它顺利滚动。

我在那里看过几个“Compact Framework”双缓冲区的例子,但它们都是双缓冲绘制方法(即graphics.DrawString)。我的自定义控件本身不做任何绘画。它只是在面板上放置正常的网格和标签,并让面板画上它们。

是否有一种方法来加倍缓冲区正常控制(又不是自定义绘画)?

+0

如果你找不到答案,也许有一种方法可以延迟更新,直到控件完成移动/滚动,如果这会有所帮助。 – 2011-02-18 04:30:24

回答

1

Compact Framework控件没有DoubleBuffered属性或底层的双缓冲机制。没有办法添加它。

获得双缓冲的唯一方法是重写控件的绘制并自己做。

+0

感谢您的指针。我尝试在面板和面板上的OnPaint方法中使用BitBlt控件,但它并没有改善滚动的扭曲(它没有太多闪烁,它实际上是绘制了控件的部分内容,而且绘画太慢而笨重)。自从我的C++日子(几年前和几年前)以来,我没有必须用BitBlt做很多事情。所以我可能做错了。如果您有任何示例代码可以帮助实现双缓冲,那将非常棒。 – Vaccano 2011-02-18 21:16:32