您的位置:程序门 -> .net技术 -> c#



当窗体上的控件多并且为透明色时,界面刷新速度慢


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


当窗体上的控件多并且为透明色时,界面刷新速度慢[已结贴,结贴人:meadow74]
发表于:2007-01-26 15:56:55 楼主
1。在窗体的backgroundimage上,设置一个背景图
2。在一个窗体上放了10个label,把label变成透明色以显示背景图片的效果,
3。如果窗体大小调整,或被其他窗体挡住,再次显示时,
      那么速度非常慢(主要是指label的显示速度),如果不是透明的,速度非常快,
4。我知道他是update他那块的背景造成的,有办法提速吗?
发表于:2007-01-26 16:15:451楼 得分:5
换个机子试试吧,这方面我还真没试过,不过10个label也不至于到刷新慢的程序吧,你再查查程序吧。
发表于:2007-01-26 16:26:582楼 得分:0
我机器不慢,而且问题肯定会出现的,出现的条件:
1。界面背景加一个大图片,我加载的图片大小15k左右,gif格式
2。label设置为透明色,并有多个
这时当将覆盖在这个界面上的其他界面移动开时,可以很到label依次显示的顺序
发表于:2007-01-26 16:29:033楼 得分:0
是有这个问题,不好解决.
发表于:2007-01-26 16:44:114楼 得分:5
.net牵扯到些底层gdi+的东西都不太好弄
发表于:2007-01-26 16:45:515楼 得分:5
帮顶了1
发表于:2007-01-26 16:48:336楼 得分:0
这个问题挺普遍的,确实影响视觉效果,各位路过的大侠帮帮忙吧
发表于:2007-01-26 16:48:397楼 得分:5
透明效果要1次or运算,是很慢
发表于:2007-01-29 09:23:158楼 得分:30
有一个办法楼主可以试试,就是不要把图加到backgroundimage属性,而是打开双绶冲属性,重写基类的onpaint及onpaintbackground两个方法,在这两个方法中对你的 "背景图 "定制绘制,这样的话可能会提高效率,因为默认的对背景的绘制 "不太合理 ".
发表于:2007-01-29 09:32:279楼 得分:10
gdi+   构图   本来就很慢
楼主可以考虑使用gdi   或者   api直接来替换你的操作。
发表于:2007-01-29 10:32:3810楼 得分:0
to:hbxtlhx(平民百姓)
    多谢,我今天试试这个方法,如果可行,明天结贴。
    但感觉和标签的透明属性设置关系也很大,基于以下两点
    1。如果标签不设置为透明,标签显示很快
    2。背景在拖动等重绘时,显示不是很慢,只是标签所在的地方显示慢
发表于:2007-01-29 10:34:1111楼 得分:0
to:hertcloud(·£dotnet@c/c++£·做个热心人)
      你说的是否是在c#内,调用window   api函数,完成背景图的加载,和标签的透明处理?
发表于:2007-01-29 10:40:4412楼 得分:5
用线程可能要快点
发表于:2007-01-29 10:44:3413楼 得分:5
不但标签设置透明的时候有慢的感觉,对一个form来说设置成透明的时候也会有 "不爽的 "感觉,比如在一个form设置为透明后调用show()来显示就会有一闪的感觉.
发表于:2007-01-29 10:58:3814楼 得分:0
to   zhangci226(三只熊熊):
      在设置form的背景图,和label的透明属性时,如何用线程?
发表于:2007-01-29 13:55:2715楼 得分:5
你应该把label直接画到背景图片上去,这样会快很多……
发表于:2007-01-29 14:03:1716楼 得分:10
不要这样设计,改用graphics   直接绘制背景和label的内容
发表于:2007-01-29 14:39:3117楼 得分:0
因为label还要接收单击事件,直接绘制就不好控制了单击时间了,
发表于:2007-01-29 14:48:2018楼 得分:5
可能我的回答没有价值

--------------------------


但是在wpf中100个控件的加载已不会出现闪烁   或者速度慢的问题了
发表于:2007-01-30 09:44:5219楼 得分:0
就是把加载label的那段代码写在线程里去执行
发表于:2007-01-30 11:33:0920楼 得分:10
控件多后,每个控件在界面刷新的时候都需要进行多次的重绘操作,这样就很容易引起闪烁,这个不是加载控件的问题,而是多次重绘的问题,用线程加载也是没有用的.图形涉及太多的话,最好采用ivony()和gxy2005(晓晨美眉好^_^)   说的,直接绘制,不在采用label控件,把所有需要显示的图形元素在内存中构造完成后一次性的draw到界面,不过这个操作就相对麻烦很多.
发表于:2007-06-28 11:02:5121楼 得分:0
我也遇到这个问题了.哪位高手给解决一下.


快速检索

最新资讯
热门点击