我的窗体中有很多控件,并且都设置了Anchor为Top、Left和Right或者Dock为Top或Fill,这样窗体在放大、缩小或者最大化后会按照窗体比例进行缩放。虽然美观,但是也带来不便,当窗体放大、缩小或者最大化时,窗体不停地闪烁,要近30秒时间在不停闪烁,这让用户受不了。有没有什么设置或者好的方法使窗体控件既可按照比例缩放,又不会闪烁。谢谢大家指教!急用!!
解决方案 »
- XP可用的GDI+发光字画法...
- 想VS工具箱的“分类管理控件效果”是如何实现的?
- C#深拷贝的问题……
- 只读属性的赋值问题
- 鼠标指向什么地方,可以看到这一行代表的值,而不是其中某一项的值:UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.Ge
- c#中如何将double类型的值转成16进制
- 所有人进来,再谈对于初学者学习是否跟上时代,看谁观点胜出~~~
- 组件出现注册过期或没有,该怎么操作啊!
- c#用jmail组件接收邮件问题
- 关于c#连接SQL server的问题。。求大神解答!
- 一个ASCII码序列中,遇到回车换行符如何自动换行
- 如何遍历Dotnetbar中的explorerbar控件
如果没有自绘界面而出现的闪烁,这与显卡的性能有直接的关系.
可以通过代码来调整它,总之让Dock不再认为窗体始终在变化.
比如,在ResizeEnd过程中,手动调整目标控件大小,起到"Dock"效果.
由于只会在ReSizeEnd时发生,所以在窗体调整时不会"闪".
当然,如果想要更好的效果,您不妨参考一下我的思路:
1 定义一个Point变量,用来存储窗体大小
2 在窗体的Mouse_Up时判断当前窗体大小是否等于该Point,以判断是否被调整了
3 如果调整,则"手动调整,仿Dock延伸",否则,不作调整.
使用UpDateLayeredWindow()这个API来将您的窗体合成到屏幕上,这是不会有闪烁的,但缺点是无法显示窗体上的控件,除非您通过代码来将控件"画"到窗体图片上.在您尝试上楼的方法时,您可以即时反馈您试验的效果,以使我们能更好地去分析并帮助您解决.
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);//以下三行消除主界面闪烁
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
闪烁减轻了些,但还是有闪烁,而且在我的机器上闪烁比较少,但是到客户的机器上还是比较厉害,不知为何(客户的机器配置和我机器的配置一样)。