用css定位,他有一个body属性好象是重新计算所有元件定位

解决方案 »

  1.   


    比较完整的代码如下,在数量比较多的时候比较慢,而且窗体闪烁很厉害: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{}
    }
      

  2.   

    我使用过双缓冲技术,效果也不好!,关键是control.left=100,control.top=10每一条语句都会让控件重绘一次,能设定完成后一起更新就好了,
      

  3.   

    SuspendLayout()
    ResumeLayout()
    我使用过,但是效果不好,还是有点慢呀
      

  4.   

    SuspendLayout()
    control.visable = false;
    //code
    control.visalbe = true;
    ResumeLayout()
      

  5.   

    试一下把所有控件放在一个 panel 中
      

  6.   

    SuspendLayout()
    control.visable = false;
    //code
    control.visalbe = true;
    ResumeLayout()
    我也使用过,速度还是差不多!