public class  CustomListView  :  System.Windows.Forms.ListView 

     
public  CustomListView() 
     { 
         SetStyle(ControlStyles.DoubleBuffer
|ControlStyles.AllPaintingInWmPaint 
                   |ControlStyles.UserPaint,true); 
         UpdateStyles(); 
     } 

双缓冲技术实现绘制图形不闪烁

protected SetStyle (
 ControlStyles flag,
 value
)

如果将 AllPaintingInWmPaint 位设置为 true,则将忽略 WM_ERASEBKGND 窗口消息,

而直接从 WM_PAINT 窗口消息调用 OnPaintBackground 和 OnPaint 方法。

这通常可减少闪烁,除非其他控件将 WM_ERASEBKGND 窗口消息发送到该控件。

可以发送 WM_ERASEBKGRND 窗口消息以达到与 SupportsTransparentBackColor 相似的假透明效果;

例如,具有平面外观的 ToolBar 就采用这种方法。
若要完全启用双缓冲,可以将 OptimizedDoubleBuffer 和 AllPaintingInWmPaint 位设置为 true。

但是,启用双缓冲的首选方法是将该控件的 DoubleBuffered 属性设置为 true,这会产生同样的结果。

 ListView . DoubleBuffered 属性
获取或设置一个值,该值指示此控件是否应使用辅助缓冲区重绘其图面,以减少或避免闪烁。

命名空间:   System.Windows.Forms
程序集:   System.Windows.Forms(在 System.Windows.Forms.dll 中)
 
protected override bool DoubleBuffered { get; set; }

相关文章: