C# 如何解决SplitContainer设置成透明时闪烁的问题

本文探讨了如何通过反射设置SplitContainer及其子控件的双缓冲属性来减少界面闪烁,但这种方法在拖动分割线时仍有闪烁。解决方法是重写控件,启用ControlStyles的UserPaint、AllPaintingInWmPaint和OptimizedDoubleBuffer选项,并确保所有子容器也启用双缓冲。
摘要由CSDN通过智能技术生成

转载地址:https://zhidao.baidu.com/question/497293972425324804.html

现在使用

splitContainer1.GetType().GetProperty(“DoubleBuffered”, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(splitContainer1, true, null);
splitContainer1.Panel2.GetType().GetProperty(“DoubleBuffered”, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(splitContainer1.Panel2, true, null);
splitContainer1.Panel1.GetType().GetProperty(“DoubleBuffered”, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(splitContainer1.Panel1, true, null);

闪烁明显改善,但是还存在。尤其是拖拽中间的分割线的时候。请问如何彻底消除闪烁现象?


重写一个控件继承 SplitContainer,在构造函数里加:
this.SetStyle(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer, true);

另外如果容器内部你还有别的容器控件(尤其是 Panel、GroupBox、甚至 PictureBox),这些子容器没启用双缓冲的话,SplitContainer 即使开了双缓冲也没用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值