急!求助——winform程序加载时控件闪烁严重

yoyo_fan_503 2010-09-03 08:48:15
求各位大虾帮助
winform程序界面有70多个控件(Lable 和 TextBox),在ShowDialog() 时,这些控件显示得特别慢,好像是一条线一条线画出来的,而且还重重叠叠的,看起来特别的闪。
在网上搜索了好多方法,都不管用;
1、this.SuspendLayout(); .... this.ResumeLayout(false);
2、双缓冲 DoubleBuffered true...
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
3、……

SOS……。
...全文
2248 82 打赏 收藏 转发到动态 举报
写回复
用AI写文章
82 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码酷 2013-04-10
  • 打赏
  • 举报
回复
protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } 这个方法应该能够解决你的问题,但是同时也会出现其他一些问题,win7系统上好一些,请自己尝试
  • 打赏
  • 举报
回复
本屌现在也出现这个问题了。panel里面的几个按钮虽然不闪,不过隐藏再显示就会依次出现几个图标。。。
YS_nice_stone 2012-04-01
  • 打赏
  • 举报
回复
我也遇到了同样的问题,也是采用了show(),但并不是整个屏幕闪烁,是窗体内部的控件位置,窗体的大框架首先呈现,但控件的位置却全部为黑色,过一段时间才陆续呈现……
火星大能猫 2011-07-27
  • 打赏
  • 举报
回复
看来的确无解了.
dgsf007 2010-09-17
  • 打赏
  • 举报
回复
这个问题很久前就遇到过,研究半年多,无解。
但是如果是C++或者PB做同样的事情,不需要优化,一点不闪。

最后的解决方式是换来第三方的控件,可以极大的改善闪烁。估计是因为自带控件功能太多,导致慢。

还有不要使用Fill之类的属性,也可以改善点。网上说的双缓存之类的解决方案,完全没用,无需尝试。
爱睡觉的猫 2010-09-17
  • 打赏
  • 举报
回复
我最近也在头疼这个问题,我的项目是200+的控件,效果就不说了,无法忍受,这个跟背景也有关系。所以考虑自己画了……
yoyo_fan_503 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 76 楼 dgsf007 的回复:]
这个问题很久前就遇到过,研究半年多,无解。
但是如果是C++或者PB做同样的事情,不需要优化,一点不闪。
最后的解决方式是换来第三方的控件,可以极大的改善闪烁。估计是因为自带控件功能太多,导致慢。
还有不要使用Fill之类的属性,也可以改善点。网上说的双缓存之类的解决方案,完全没用,无需尝试。
[/Quote]
唉……。C# 和C++相差这么多?感觉机制完全不同。。
yoyo_fan_503 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 75 楼 jijbabawushi1 的回复:]
我最近也在头疼这个问题,我的项目是200+的控件,效果就不说了,无法忍受,这个跟背景也有关系。所以考虑自己画了……
[/Quote]
呵呵 能画就自己画了。不过感觉自己画 控制坐标太复杂。
有人推荐wpf 没试过……
yoyo_fan_503 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 72 楼 hcy000 的回复:]
窗体是不是设置背景图片了啊 如果是设置背景了图片那肯定会闪的很厉害的
没有的话70个控件在正常情况下是不会出现楼主所说的那么严重的闪烁的。
但也有机器的原因但不是配置高低的问题我以前也碰到这样的情况在本机电脑上显示datagridview时慢到明显看到机器一条线一条线的画网格,但是把程序放到一同事机器上却很正常(同事机器配置比我的还低)。
楼主也可以换台电脑试试。
[/Quote]
上面已经说过是由于我程序载入了Skin的原因,如果去掉的话,就不闪了。
但是我很想把皮肤留下来。。。
yoyo_fan_503 2010-09-16
  • 打赏
  • 举报
回复
结贴了……。如果有别的办法。欢迎继续跟帖。谢谢…… 交流一下。
hcy000 2010-09-15
  • 打赏
  • 举报
回复
窗体是不是设置背景图片了啊 如果是设置背景了图片那肯定会闪的很厉害的
没有的话70个控件在正常情况下是不会出现楼主所说的那么严重的闪烁的。
但也有机器的原因但不是配置高低的问题我以前也碰到这样的情况在本机电脑上显示datagridview时慢到明显看到机器一条线一条线的画网格,但是把程序放到一同事机器上却很正常(同事机器配置比我的还低)。
楼主也可以换台电脑试试。
yoyo_fan_503 2010-09-15
  • 打赏
  • 举报
回复

唉。再没结果就结贴……
waiting more a day ....
yoyo_fan_503 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 68 楼 li_1042237864 的回复:]
我的 40多个控件就闪的不行了, 不过我的是动态加载的 里边还有数据
希望此问题早日解决 我也参考一下

[/Quote]
唉 我的也有些是动态加载的,Cmb都绑定数据了。。。烦呀……
yoyo_fan_503 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 67 楼 kkxxllasasas 的回复:]
引用 65 楼 yoyo_fan_503 的回复:
是皮肤的问题,把皮肤去掉就不闪了,看看皮肤这怎么改吧。。。
[/Quote]


此皮肤对俺很重要…… 呜呜…… 又没有啥好办法留着皮肤但不闪的。。
纯唇Yu弄 2010-09-14
  • 打赏
  • 举报
回复
我的 40多个控件就闪的不行了, 不过我的是动态加载的 里边还有数据
希望此问题早日解决 我也参考一下
快乐大法师 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 65 楼 yoyo_fan_503 的回复:]

引用 64 楼 kkxxllasasas 的回复:
引用 61 楼 yoyo_fan_503 的回复:
引用 60 楼 zenghd 的回复:
引用 59 楼 kkxxllasasas 的回复:

谢谢 已发……
[/Quote]

skinEngine1.SkinFile = Program.SkinFileName;
在这下边加了一句
this.skinEngine1.SkinAllForm = false;

结果晕倒了,是皮肤的问题,把皮肤去掉就不闪了,看看皮肤这怎么改吧。。。
yoyo_fan_503 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 63 楼 glest 的回复:]
我认为是程序问题,我也曾经试过100多个按钮,没你说的那么严重,只是有点闪烁。
楼主机器配置?
[/Quote]
Interl(R) Corel(TM)2 Duo CPU E4600 @2.4GHz 1GB RAM
yoyo_fan_503 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 64 楼 kkxxllasasas 的回复:]
引用 61 楼 yoyo_fan_503 的回复:
引用 60 楼 zenghd 的回复:
引用 59 楼 kkxxllasasas 的回复:
[/Quote]
谢谢 已发……
glest 2010-09-10
  • 打赏
  • 举报
回复
我认为是程序问题,我也曾经试过100多个按钮,没你说的那么严重,只是有点闪烁。
楼主机器配置?
快乐大法师 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 61 楼 yoyo_fan_503 的回复:]
引用 60 楼 zenghd 的回复:
引用 59 楼 kkxxllasasas 的回复:

重新写个panel 继承panel 加双缓冲 把这些控件放进新的panel里 试试
再加这个 1、this.SuspendLayout(); .... this.ResumeLayout(false);

或者this.visble=false,然后再true各种试


1、和窗体的Do……
[/Quote]

你把代码发过来,试试能不能帮你解决。 sl0703@tom.com

或者换个思路,让它变慢,就不闪了。
呵呵
加载更多回复(58)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧