Panel控件滚动条复位解决方案 - TOMMYHU - 专注互联网开发及运营技术,提供相关资料及软件下载,奇趣网络时事评论!
Jul 8

Panel控件滚动条复位解决方案 不指定

tommyhu , 20:28 , ASP.NET , Comments(2) , Trackbacks(0) , Reads(6311) , Via Original Large | Medium | Small
今天发一个不错的重写控件,可以支持滚动条复位,效果还不错,压缩包里有空间源代码和实例

滚动条复位吧,是可以记住上下和左右的位置,然后回发页面再加载这位置 但是出现了闪烁,抖动的情况 这个是在winform下的解决方案,asp.net下目前正在研究中

有两个Panel,一个 作为 容器:Panel_1,另一个做为画布:Panel_Draw,
Panel_Draw的大小是可以调整的,不过他的父控件Panel_1的大小是随着窗口大小的变化而变化的,
所以画布Panel_Draw的大小何有可能会超出 Panel_1的范围,因此我就吧Panel_1的AutoScroll属性设置为true,让它自动显示滚动条,
但是 这时候问题出现了,在画布变大,超出 Panel_1的大小时,如果我往下 拉滚动条,显示 画布的其余部分,然后向画布 拖入一个 需要 在画布上绘制的图形时,
此时 Panel_1和Panel_Draw 都有一个失去焦点然后重新获取焦点的过程,当 控件重新获取到焦点后(也就是画布Panel_Draw开始重绘时),
Panel_1的滚动条会自动 滚动到最顶端(复位),开始,这个问题纠结我很长一段时间, 后来我想在失去焦点时 记录下 滚动条的位置,
然后在Panel_Draw重绘时,在代码中 显示的 设置  滚动条的位置,但是 这时,会出现很严重的屏幕闪烁的问题,
当然 双缓存什么的都已经设置了,我在网上看到别人说,在控件获取焦点的时候设置滚动条的位置,虽然效果好多了,但是闪烁的问题还是很明显。

后来经过几个人的研究,采用了如下的解决方案,搞定,不再出现闪烁问题,我把解决方案截了一个图,其实 就一行代码。
如图:

又试了下,其它凡是要滚动条的控件都有这个毛病,一或得焦点滚动条就跳动。还是那个方法。重写这个控件的ScrollToControl就可以了。

例如,Form控件也一样,



当把数据放在div里面,然后给div设置Scroll显示,在页面刷新后或者是处理了某个按钮的事件,这个时候div的滚动轴就会又回到起始位置,但事实上得把数据还记录到刷新前的位置!

经过思考,以及网上查询信息,得到解决办法:

Js部分:

HTML部分:

后台代码:

主要就是用一个隐藏域记录当前滚动条位置,当刷新时读取这个记录,让它回到以前的位置!
▲返回顶部
Last modified by tommyhu on2013/07/10 19:15
Add a comment

Nickname

emotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemot