今天干活的时候 碰到的问题,有两个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作为容器,问题解决.。





Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐