读书人

关于WinForm控件重绘速度慢的有关问题

发布时间: 2013-09-06 10:17:17 作者: rapoo

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

缩放效果(缩小):
关于WinForm控件重绘速度慢的有关问题

缩放代码如下:


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)


{
factortab2[i++] = (ctr.Location.X) / (float)tabPageTransducerTest.Size.Width;
factortab2[i++] = (ctr.Location.Y) / (float)tabPageTransducerTest.Size.Height;
ctr.Tag = ctr.Size;
}
proptt = factortab2;

private void tabPageTransducerTest_Resize(object sender, EventArgs e)
{

int i = 2;
float[] scale = (float[])proptt;
foreach (Control ctr in this.tabPageTransducerTest.Controls)
{
ctr.Left = (int)(tabPageTransducerTest.Size.Width * scale[i++]);
ctr.Top = (int)(tabPageTransducerTest.Size.Height * scale[i++]);
ctr.Width = (int)(tabPageTransducerTest.Size.Width / (float)scale[0] * ((Size)ctr.Tag).Width);
ctr.Height = (int)(tabPageTransducerTest.Size.Height / (float)scale[1] * ((Size)ctr.Tag).Height);

//每次使用的都是最初始的控件大小,保证准确无误。
}
scale = null;

}
用这个缩放呢,直接修改panel中的缩放

读书人网 >C#

热点推荐