[z]https://blog.csdn.net/u011108093/article/details/79448060

许多Windows 窗体控件(例如,ListView 和 TreeView 控件)实现了 BeginUpdate 和EndUpdate 方法,至于为何要这样用简单说明一下。

当我们向一个Listview控件中添加一组Item的时候,第一种方式就是把Item全部放到一个集合里,一次性加到listview中,另一种方式就是用循环的方法一次加一个Item进去。我们要说的就是这第二种方式。

如果没有使用BeginUpdate()和EndUpdate(),那么每添加一个Item,ListView都要重绘,那么当要添加的Items很多的时候,屏幕就会闪烁的现象。如果在添加Item之前使用BeginUpdate(),那么,ListView其实就不动了,等到所有的Item都添加完了,使用EndUpdate()一次重绘ListView,这样就不会发生屏幕闪烁的现象了。这也就是我们在插入数据项操作的前后要声明 BeginUpdate() 和 EndUpdate()的原因所在了。

但是如果长时间连续不断的往Listview里加数据,BeginUpdate() 和 EndUpdate()只能缓解,却不是根本的解决办法,还是会有闪烁的情况发生。这时我们就要用到双缓冲了,可以尝试重写Listview.

class DoubleBufferListView : ListView
{
public DoubleBufferListView()
{
SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
UpdateStyles();
}
}

 这样就应该可以解决闪烁的问题了。

最新文章

  1. js基础3
  2. ASP.NET 程序提交表单数据中带有html标签不能提交或者提交报错问题
  3. c++实现螺旋矩阵分析总结
  4. "Resuming debugger: error during debugging loop: TypeError: firstViewRangeElement is null"
  5. python下RSA 加密/解密,签名/验证
  6. [SAP ABAP开发技术总结]字符串处理函数、正则表达式
  7. BouncyCastle产生一个PKCS#12规范的PFX/p12证书
  8. 小白日记6:kali渗透测试之被动信息收集(五)-Recon-ng
  9. SQL正常工作日上班安排
  10. BZOJ 3955 Surely You Congest 解题报告
  11. MyBatis(5):MyBatis集成Spring事务管理(上)
  12. Swift中简单的单例设计
  13. SQL Sever 各版本下载 SQL Server 2012下载SQL Server 2008下载SQL Server 2005
  14. Unity Layout碰撞检测
  15. ubuntuOS
  16. LeetCode——ZigZag Conversion
  17. SQL获取第一天最后一天
  18. 如何在Python中使用ZeroMQ和Docker构建微服务架构
  19. 2016_NENU_CS_3
  20. 使用 PowerShell 创建和修改 ExpressRoute 线路

热门文章

  1. 一个WPF只能输入数字的行为。
  2. [java,2019-01-25] 图片和二进制互转
  3. eShopOnContainers 看微服务④:Catalog Service
  4. mysql的基本操作笔记
  5. MySql CURD操作(数据的增删改查)
  6. Photoshop CC安装与破解方法
  7. ucos之互斥信号量及优先级反转
  8. python module -- sys
  9. window Linux 双系统安装
  10. cept源代码目录结构详解_知识树(转)