【求助】窗口内有很多控件时,如何让保证滚动时不闪

cuijiyue 2015-05-21 01:42:09
需要做一个界面,上面有很多控件,1000多个吧,就是button或者text,还有一些线

用C#写了个小例子,一个panel上,竖着排列了1000行的textview
但是当拉动滚动条时,界面上的会一闪一闪的,感觉就是刷新率跟不上

但是写代码时,几千行的代码,上下滚动,也不会感觉到闪啊,

有没有什么方法能优化下
...全文
145 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Donniezhu 2015-05-22
  • 打赏
  • 举报
回复
你的线应该使用绘图实现的吧?当你拖动滚动条的时候,页面就会激发重绘事件,一般绘图时会清空之前的绘图,如果清空时没有设置颜色,那就会是白色,然后之后再绘图,这就不难理解刷屏的感觉了。 1,首先清空时设置颜色 比如 g1.Clear(this.BackColor); 2,可以研究一下双缓冲技术。网上有很多,这只是我随便找到的 http://blog.csdn.net/keep_silence_/article/details/7849880 3,第三就是2楼说的,尽量重复使用控件,尽量使用低级别控件。比如用textbox 的某个事件,替代button的功能。
gengchenhui 2015-05-22
  • 打赏
  • 举报
回复
1000多个,竟然没死?
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
当滚动条拖动时去动态加载、销毁、(用轻量的)替换控件。
最主要地是替换。把(比如说)向上滚动时移出可见区域的控件重新使用并且移动到屏幕下方,这样的界面刷新性能自然就够了。
  • 打赏
  • 举报
回复
人家“几千行的代码,上下滚动,也不会感觉到闪”的技术,主要还是程序逻辑设计方面比较强(使用控件的流程方法),而不是仅仅靠会用点控件啊。
  • 打赏
  • 举报
回复
textview是啥,我还真的不知道。 不过不同控件的显示效率是不同的,选择合适的(例如label、listbox等等),可以降低几十倍的资源占用率,可以“不闪”。特别是不要使用那些动不动就Paint(重绘)的控件。 如果你觉得一个复杂的控件比较好,那么就用20~30个控件复用,当滚动条拖动时去动态加载、销毁、(用轻量的)替换控件。
amdunkszy 2015-05-21
  • 打赏
  • 举报
回复
建议使用支持虚拟化的控件 例如:VirtualizingStackPanel 如果你是表单形式的 我建议你用 DataGrid 还方便布局 1000多的控件都加载上我觉得没死就是奇迹

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧