日期:2014-05-17  浏览次数:21474 次

关于WinForm控件重绘速度慢的问题
在一个WinForm项目中需要用到座席状态监控,我在一个Panel里放置了几百个控件,每个控件对应一个座席,控件的位置就是座席人员的物理位置,所以在调整Form大小时,控件要按比例的放大和缩小(不能重排,否则位置信息就乱掉了)。
缩放效果(原始):


缩放效果(缩小):


缩放代码如下:

            float fWidthRate = (float)this.Size.Width / this._lastSize.Width;
            float fHeightRate = (float)this.Size.Height / this._lastSize.Height;

            this.toolStripContainer.ContentPanel.Scale(new SizeF(fWidthRate, fHeightRate));


获得调整后的窗口比例然后按照此比例调整Panel及其中的控件,功能上完全可以实现,但是改变大小时控件会有很明显的重绘过程(原有控件消失,新尺寸的控件重新出现),有没有什么办法让这种调整更加平滑,最好能做到像放大缩小图片那样没有刷新过程。GDI+可以做到吗?求各位大虾解答。
控件 重绘 刷新 GDI+ WPF

------解决方案--------------------
增加缓冲啊
很早之前就有人讨论过这个了
你界面上的都是一些button吧,没细看,或者是你自己写的一个轻量级控件。

将这些button使用GDI+画在一个bitmap里面,然后将bitmap画出来,可以达到你要求的减少闪烁的要求。
------解决方案--------------------
引用:
引用:引用:增加缓冲啊
很早之前就有人讨论过这个了
你界面上的都是一些button吧,没细看,或者是你自己写的一个轻量级控件。

将这些button使用GDI+画在一个bitmap里面,然后将bitmap画出来,可以达到你要求的减少闪烁的要求。
是自己实现的控件,GDI+我之前没用过,准备试一下,……

 int counttabPageTransducerTest = this.tabPageTransducerTest.Controls.Count * 2 + 2;
            float[] factortab2 = new float[counttabPageTransducerTest];
            int i = 0;
            factortab2[i++] = tabPageTransducerTest.Size.Width;
            factortab2[i++] = tabPageTransducerTest.Size.Height;
            foreach (Control ctr in this.tabPageTransducerTest.Controls)