Winform Panel滚动后重绘异常

最近在用Panel时遇到一个问题,就是Panel在滚动后,内部的控件重绘异常。最大化最小化时候重绘没有问题,只是在拖动滚动条时遇到问题,请看下图,上面的框框边缘都是平滑正常的,下面通过滚动条拖出来的框框就出问题了。这个肯定是重绘引起的,网上有写道这个问题的文章也有不少,但是一般都是从Transform角度来说的,有点复杂,而且我这里用的不奏效,因为我这里是Panel内的控件重绘出问题而不是Panel上绘图问题。

这里我用了一种简单的方法规避了这个问题,这里写出来,希望可以给大家帮助。我们在最大化的时候却没有这个问题,所以我就想在滚动结束后是否可以trigger它再做一次最终重绘,这样不过中间过程只要滚动停下来就最终重绘,相信用户体验也不会太差。

        private void panelMain_Scroll(object sender, ScrollEventArgs e)
        {
            panelMain.Invalidate(true);
        }

 所以就在panel的OnScroll事件中强制invalidate它内部的所有控件,以实现强制重绘。

这样就ok了,虽然滚动过程中可能会有一些异常,但是只要滚动停止就会重绘,所以异常只是一闪而过,不会给用户体验带来什么影响。这里我还不清楚Panel内部控件太多时会不会导致滚动速度慢。

希望这篇文章能给大家一些提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值