public class CustomListView : System.Windows.Forms.ListView
{
public CustomListView()
{
SetStyle(ControlStyles.DoubleBuffer|ControlStyles.AllPaintingInWmPaint
{
public CustomListView()
{
SetStyle(ControlStyles.DoubleBuffer|ControlStyles.AllPaintingInWmPaint
|ControlStyles.UserPaint,true);
UpdateStyles();
}
}
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.dll 中)
protected override bool DoubleBuffered { get; set; }