C# 我切换界面时布局控件很慢是怎么回事

如图我切了一下界面然后切回来控件就一个一个的加上这个过程都看的到这是怎么回事... 如图 我切了一下界面 然后切回来控件就一个一个的加上 这个过程都看的到 这是怎么回事 展开
 我来答
HAL9000PLUS
2010-05-08 · TA获得超过1279个赞
知道小有建树答主
回答量:663
采纳率:0%
帮助的人:716万
展开全部
我这里速度快得很。只有轻微的闪烁感。
难道是电脑问题?

我有点明白了。
你这种编程方式会很慢的。
别用自定义控件。
自定义控件的开销太大。
用gdi手绘界面

另外,你先试试:form.doublebufferd属性。
设为true
form会在另一个缓冲区里绘好,然后复制到前台界面里。
控件太多时,直接在界面上重绘,会引起一个一个重新显示。
在显示之前还会擦掉背景,引起闪烁感。
双缓冲就是另外开一个图形窗口内存,相当于一个看不到的窗口吧!然后在后台绘制,绘完之后,把后的效果一次性复制到前台用户能看到的那个窗口。
这样就没有闪烁了。

但是你的程序如果很慢很慢,那就不是这个能解决的问题了。
那种情况下,就要考虑用gdi绘图,不用控件了。

设计一个一个表示黑白子所在位置的数据结构,比如chesses类,然后从panel类重载一个类,然后增加一个Chesses的属性。
重写这个新控件的OnPaint方法,利用Chesses属性的内容绘制棋盘。
在主窗口里,把Panael的类名改为你的新Panel, 每次有新步子之后,更新Panel的那个棋子属性,然后调用Panel的Update方法即可。
这样比新增控件的方法速度快很多。
画棋子时,可以直接用graphics.drawimage方法来绘上去即可。
在windoww7中,似乎如果短时间里切换窗口,windows7似乎会帮程序保存位图,连paint事件都不会触动。
你用自定义控件,自定义控件也是用的gdi函数重绘。
而且还要处理control的一大堆事件,还要计算布局,很慢的。
重绘方法只在操作系统认为需要重绘时,只会重绘一次。
不是不停循环的。
而且有时候OS还会要求你的程序部分重绘,只重绘无法由OS自行恢复的那一部分。
在窗口变大时,多出来的部分会部分重绘。在窗口移动时,如你在OS中设定移动中不显示内容,也会重绘。被其他窗口挡住了,又被移开时,也会重绘。
如果挡住的是一部分,则部分重绘。
程序如果想主动重绘,可以调用一下control.update或是control.invalid方法,就可以强行重绘,这可以用于你下了一步新棋时。强行重绘时,也可以计算一下大概的范围,然后强制局部重绘,这样就很快了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式