zoukankan      html  css  js  c++  java
  • ListView的BeginUpdate()和EndUpdate()的用处

    许多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();
    }
    }

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

  • 相关阅读:
    [Tomcat源码分析] Eclipse中搭建Apache Tomcat源码调试环境
    java基本数据类型
    JD-GUI反编译出现ERROR
    Convert.ToInt32()与int.Parse()的区别 (转载)
    C#编写记事本(高仿)
    少年三国志首页效果实现
    Linux系统下文件删除的恢复方法
    prefab 程序自动写回
    Unity3d UI与逻辑分离改造
    在windows上练习object-c
  • 原文地址:https://www.cnblogs.com/net-sky/p/10232303.html
Copyright © 2011-2022 走看看