当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作为容器,问题解决.。





“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 7

打赏作者

猴头

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值