在运行中,修改大量窗体控件的位置大小,出现运行缓慢的问题~ 用css定位,他有一个body属性好象是重新计算所有元件定位 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比较完整的代码如下,在数量比较多的时候比较慢,而且窗体闪烁很厉害:private void Resize() { try { float ScaleX=(float)(this.ResizeForm.Width) /(float)(this.OldFormWidth) ; float ScaleY=(float)(this.ResizeForm.Height)/(float)(this.OldFormHeight); //this.ResizeForm.v foreach(Control ob in this.ResizeForm.Controls) { if(ob.Tag!=null) { char [] sp1={','}; string Str=(String)ob.Tag; string [] Parm=Str.Split(sp1); int X,Y,H,W; if(Parm.Length ==4) { X=int.Parse (Parm[0]); Y=int.Parse (Parm[1]); W=int.Parse (Parm[2]); H=int.Parse (Parm[3]); ob.Visible =false; ob.Left =(int)(X*ScaleX); ob.Top =(int)(Y*ScaleY); ob.Width =(int)(W*ScaleX); ob.Height =(int)(H*ScaleY); Font ft=new Font (ob.Font.Name ,this.OldFormFont*(float)this.ResizeForm.Height,ob.Font.Style); ob.Visible =true; ob.Font =ft; } SetSubControls(ob,ScaleX,ScaleY); } } //this.ResizeForm.Visible =true; } catch{} } private void SetSubControls(Control cn,float sx,float sy) { try { foreach(Control cn1 in cn.Controls) { if(cn1.Tag !=null) { char [] sp1={','}; string Str=(String)cn1.Tag; string [] Parm=Str.Split(sp1); int X,Y,H,W; if(Parm.Length ==4) { X=int.Parse (Parm[0]); Y=int.Parse (Parm[1]); W=int.Parse (Parm[2]); H=int.Parse (Parm[3]); cn1.Left =(int)(X*sx); cn1.Top =(int)(Y*sy); cn1.Width =(int)(W*sx); cn1.Height =(int)(H*sy); Font ft=new Font (cn1.Name,this.OldFormFont*(float)this.ResizeForm.Height,cn1.Font.Style); cn1.Font =ft; } SetSubControls(cn1,sx,sy); } } } catch{} } 我使用过双缓冲技术,效果也不好!,关键是control.left=100,control.top=10每一条语句都会让控件重绘一次,能设定完成后一起更新就好了, SuspendLayout()ResumeLayout()我使用过,但是效果不好,还是有点慢呀 SuspendLayout()control.visable = false;//codecontrol.visalbe = true;ResumeLayout() 试一下把所有控件放在一个 panel 中 SuspendLayout()control.visable = false;//codecontrol.visalbe = true;ResumeLayout()我也使用过,速度还是差不多! ado.net entity connectionString如何配置 C#如何实现UnConnection Ip??? 怎样设置一个窗口的快捷键 求助,Excel添加菜单的问题! 求解Utf-8编码下url传递参数部分丢失的问题! 如何在Design Time获取控件的事件值? c#怎样上传文件! c#发送esc打印命令到打印机 一个关于界面的问题 ScrollBar没有MouseDown事件? 我想用C#做一个通讯录,应怎样下手? 如何在ASP.NET中实现进度条?
比较完整的代码如下,在数量比较多的时候比较慢,而且窗体闪烁很厉害:private void Resize()
{
try
{
float ScaleX=(float)(this.ResizeForm.Width) /(float)(this.OldFormWidth) ;
float ScaleY=(float)(this.ResizeForm.Height)/(float)(this.OldFormHeight);
//this.ResizeForm.v
foreach(Control ob in this.ResizeForm.Controls)
{
if(ob.Tag!=null)
{
char [] sp1={','};
string Str=(String)ob.Tag;
string [] Parm=Str.Split(sp1);
int X,Y,H,W;
if(Parm.Length ==4)
{
X=int.Parse (Parm[0]);
Y=int.Parse (Parm[1]);
W=int.Parse (Parm[2]);
H=int.Parse (Parm[3]);
ob.Visible =false;
ob.Left =(int)(X*ScaleX);
ob.Top =(int)(Y*ScaleY);
ob.Width =(int)(W*ScaleX);
ob.Height =(int)(H*ScaleY);
Font ft=new Font (ob.Font.Name ,this.OldFormFont*(float)this.ResizeForm.Height,ob.Font.Style);
ob.Visible =true;
ob.Font =ft;
}
SetSubControls(ob,ScaleX,ScaleY);
}
}
//this.ResizeForm.Visible =true;
}
catch{}
}
private void SetSubControls(Control cn,float sx,float sy)
{
try
{
foreach(Control cn1 in cn.Controls)
{
if(cn1.Tag !=null)
{
char [] sp1={','};
string Str=(String)cn1.Tag;
string [] Parm=Str.Split(sp1);
int X,Y,H,W;
if(Parm.Length ==4)
{
X=int.Parse (Parm[0]);
Y=int.Parse (Parm[1]);
W=int.Parse (Parm[2]);
H=int.Parse (Parm[3]);
cn1.Left =(int)(X*sx);
cn1.Top =(int)(Y*sy);
cn1.Width =(int)(W*sx);
cn1.Height =(int)(H*sy);
Font ft=new Font (cn1.Name,this.OldFormFont*(float)this.ResizeForm.Height,cn1.Font.Style);
cn1.Font =ft;
}
SetSubControls(cn1,sx,sy);
}
}
}
catch{}
}
ResumeLayout()
我使用过,但是效果不好,还是有点慢呀
control.visable = false;
//code
control.visalbe = true;
ResumeLayout()
control.visable = false;
//code
control.visalbe = true;
ResumeLayout()
我也使用过,速度还是差不多!