当Panel等容器类控件 失去焦点再获得焦点后,滚动条复位的解决方式。

今天干活的时候 碰到的问题,有两个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重绘时,在代码中 显示的 设置  滚动条的位置,但是 这时,会出现很严重的屏幕闪烁的问题,

当然 双缓存什么的都已经设置了,我在网上看到别人说,在控件获取焦点的时候设置滚动条的位置,虽然效果好多了,但是闪烁的问题还是很明显。


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

 如图:



重写了Panel,然后重载了ScrollToControl方法,在方法中就这一行代码,然后用这个 PanelEx作为容器,问题解决.。





  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值