我有一段程序,需要每5秒更新listview里的内容,更新方法如下
MylistView.Items.Clear();//先清空原来的内容
MylistView.Items.Add(Item1)//将新内容逐个添加
MylistView.Items.Add(Item2)
……
这样会造成每次更新数据时屏幕都因listview刷新而闪动(类似于Web页面的刷新),效果很不好,更糟的是每次刷新后listview滚动条都会弹到最上方,几乎无法看下面的数据了。
这个问题有办法解决吗?
MylistView.Items.Clear();//先清空原来的内容
MylistView.Items.Add(Item1)//将新内容逐个添加
MylistView.Items.Add(Item2)
……
这样会造成每次更新数据时屏幕都因listview刷新而闪动(类似于Web页面的刷新),效果很不好,更糟的是每次刷新后listview滚动条都会弹到最上方,几乎无法看下面的数据了。
这个问题有办法解决吗?
解决方案 »
- 上传文件到相对路径
- Winform webBrowser控件
- 求示例代码,一个窗体上放一个listview,然后将sql2000的数据库表中内容,填入listview
- random的问题
- “System.Data.SqlClient.SqlException”类型的异常
- 求一小票完整打印代码,能运行是最好的,类似超市那种
- 急~~~~!水晶报表如何显示2张无关联的表?~
- 请教树形控件字体及上下间距的问题,一定给分
- 拜问求助!拜问求助!拜问求助!
- 新建一个类的属性是数组类型,怎样用get、set定义?
- 怎样取得web页面上的全部对象?
- Microsoft SUN IBM Oracle Borland 五公司同时开发一种新型语言:MSIOB
...
MylistView.EndUpdate();
MylistView.BeginUpdate();
...
MylistView.EndUpdate();
我希望Listview在更新数据时能保持原来的状态,类似于OutLook那样:当列表中出现新邮件时,滚动条的位置、原先哪一行被选中都不会改变。
2.确实可以在数据更新前纪录下来哪些行被选中了`,然后在更新后再次选中它们。但个人认为这应该不是最佳办法
3.就算我使用2中的办法,也只能解决“保持选中行”的问题;滚动条还是会自动弹到最上方,这个怎么办呢我觉得应该有一个系统的解决方法。就像web页面也有办法防止刷新所带来的种种不好的效果(好像是在页头设一个什么smart属性就可以,具体记不得了)。唉期待高手
参考一下www.codeproject.com的文章。
重载winproc函数,在paint消息中修改。
MylistView.Items.Add(Item1)//将新内容逐个添加
MylistView.Items.Add(Item2)你可不可以考虑,记住你刷新后,内容的改变呢??
然后只更新改变的项,就不需要clear了,那么是不是会很好呢
这样排列顺序也不会变的
然后用ListView.EnsureVisible(ListView.Items.Count - 1);
应该就可以了!