首页 > 新闻系统 > 编程天地 > 文章正文

C#彻底解决listview的闪屏问题

2008-04-16 09:54:52 来源:中国自学编程网 作者:佚名 点击:
也许很多人也遇到这样的问题,连续不断向listview中加载数据时界面会不停的闪烁,当你用listview.BeginUpdate(); listview.EndUpdate(); 虽然可以减轻一些,但也不能彻底消除闪屏。

也许很多人也遇到这样的问题,连续不断向listview中加载数据时界面会不停的闪烁,当你用listview.BeginUpdate();     listview.EndUpdate(); 虽然可以减轻一些,但也不能彻底消除闪屏。不信?可以试试下面的代码:    public partial class Form1 : Form
    ...{
        private int counter = 0;
        public Form1()
        ...{
            InitializeComponent();
        }
        DoubleBufferListView lv = new DoubleBufferListView();

        ListView lv = new ListView();
        private void Form1_Load(object sender, EventArgs e)
        ...{
            timer1.Enabled = false;
            this.Controls.Add(lv);            
            lv.View = View.Details;
            lv.GridLines = true;
            lv.BackColor = Color.Silver;
            lv.Columns.Add("aa");
            lv.Columns.Add("bb");
            lv.Columns.Add("cc");
            lv.Height = 300;
            lv.Width = 300;
            timer1.Enabled = true;
         }
        private void timer1_Tick(object sender, EventArgs e)
        ...{
            lv .Items.Add(counter.ToString());
            counter++;
        }
     }
解决方法:

使用双缓冲,重写listview

class DoubleBufferListView : ListView
    ...{
        public DoubleBufferListView()
        ...{
            SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
            UpdateStyles();
        }
    } 
    public partial class Form1 : Form
    ...{
        private int counter = 0;
        public Form1()
        ...{
            InitializeComponent();
9 7 3 1 2 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203