作者enher (捣蛋三帅)
看板C_Sharp
标题[问题] 残影 重绘
时间Tue May 5 23:25:23 2015
小弟最近遇到一个问题
想请问看看有没有人也遇过 有方式解决的
大致上是有一个固定大小的Panel_A
在程式内利用回圈产生许多相同的usercontrol(假设有50个))
放进Panel_A内 并用一个List<UserControl>来管理这些
每个UserControl内有一个panel 并且读取某张图片放入BackgroundImage
然後滑鼠在Panel_A上做 MouseDown + MouseMove的行为
在Panel_A的MouseMove触发时判断滑鼠左右位移的量
来改变每个usercontrol的location
现象就类似在拖拉这些Image
但数量一多(大约十几个就会)移动时就可感受到拖拉时有残影的感觉
或是拖拉後停止时 图片有瞬间被扫过的刷新感
我目前掌握到的资讯:
网路大多都是设置DoubleBuffer的方法
也有试过SuspendLayout 和ResumeLayout
但还是会有该现象 只是严重与否
也试过每次移动时呼叫refresh invalid update等方式
但refresh因为会立即重绘,使得拖拉操作感变慢 产生拖拉到定位才刷新的错觉
另外两个方式虽不造成变慢 但残影的感觉仍略微严重
故此想上来请问是否有更好的解决方式
我目前的想法是找寻
更改location时,不要重绘usercontrol内的panel或是该usercontrol
因为图片并无改变大小
希望有类似经验的人能够提供一些方法 或是一些方向来讨论
感谢各位
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.250.19.8
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1430839528.A.69F.html
1F:→ KanoLoa: 最简单的方法,换强一点的硬体 05/05 23:30
2F:→ KanoLoa: 釜底抽薪的办法,预设绘图不要用,全部自己画... 05/05 23:31
3F:→ KanoLoa: 然後wpf这方面的优化作比较好.. 05/05 23:31
4F:→ enher: 自己画的意思是注册panel的paint事件?在该事件内 05/05 23:41
5F:→ enher: 利用graphic.drawimage将档案画在panel上吗? 05/05 23:42
6F:→ enher: WPF我是很想用的 但是....目前无法这麽做... 05/05 23:43
7F:推 neo5277: doevent? 05/06 00:11
8F:→ KanoLoa: 是啊,就跟做游戏是一样的... 05/06 17:43
9F:推 Litfal: 不要用control,全部自己画XD 05/07 23:59