日期:2014-05-18  浏览次数:20803 次

请各位帮我指点一下:在一个窗体上放几十个控件会闪烁的问题
我想实现一个类似于连连看那种界面,即窗体上有很多小图块,每个小图块能响应事件并能更改自身样式.
我现在的方法是:将小图块作为一个控件,从Control继承,在控件上绘图,然后将几十个控件放到主窗体上.
现在的问题是:主窗体显示控件时速度慢,且闪烁.尤其是当窗体被其他程序遮挡后需要重绘时,简直惨不忍堵.
我知道双缓冲技术可以解决绘图的闪烁问题,但我这里不知道要怎样应用这个技术,因为不是直接绘图.
如果采用直接绘图方式,则每个小图块又如响应事件和改变样式呢?
请大家给点思路,谢谢

------解决方案--------------------
这种做法不好,目前.NET里20个控件以上就开始慢了,何况连连看是N*M

参考我以前写的方块程序
http://download.csdn.net/source/162553

主要如何提高绘制的速度
连连看的区域判断和连线判断都是简单的事情
------解决方案--------------------
mark
------解决方案--------------------
this.SuspendLayout();

中间写绘制控件代码.

this.ResumeLayout(false);
this.PerformLayout();

每次OnPoint的时候调用一下OnFlash()

可以有效防止闪烁.
------解决方案--------------------
楼上说的很对,this.SuspendLayout();表示挂起界面显示,期间发生的绘制的内容只会在内存中存在,绘制完成后再调用this.ResumeLayout(false);this.PerformLayout();一次性显示出来。这样就不会闪烁了。
InitialComponents()里面就是这么做的
------解决方案--------------------
顶LSS!