您的位置:首页 > 编程语言 > C#

C#使控件随窗体变化而变化的两种方法

2013-03-25 22:37 435 查看
第一种:

float x=0;
float y=0;

private void Frm_Resize(object sender, System.EventArgs e)
{
float  newx = (this.Width )/ x;
float newy = this.Height / y;
setConstrols(newx, newy, this);
}
private void setTag(Control cons)
{
foreach (Control con in cons.Controls )
{
con.Tag = con.Width +":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
if (con.Controls.Count > 0)
{
setTag(con);
}
}
}
private void setConstrols(float newx,float newy,Control  cons)
{
foreach (Control  con in cons .Controls )
{
string[] mytag = con.Tag.ToString().Split(new char[] { ':' });
float a = Convert.ToSingle(mytag[0]) * newx;
con.Width = (int)a;
a=Convert.ToSingle(mytag[1]) * newy;
con.Height = (int)(a);
a=Convert.ToSingle(mytag[2]) * newx;
con.Left = (int)(a);
a=Convert.ToSingle(mytag[3]) * newy;
con.Top = (int)(a);
Single currentSize = Convert.ToSingle (mytag[4]) * newy;
con .Font =new Font (con.Font .Name ,currentSize,con.Font .Style ,con.Font .Unit );
if(con.Controls .Count >0)
{
setConstrols (newx ,newy ,con );
}
}
}

private void Frm_Load(object sender, System.EventArgs e)
{
x=this.Width ;
y=this.Height ;
setTag(this);
this.Resize +=new EventHandler(Frm_Resize);   }


第二种:

static float x;
static float y;
int[][] con;
float[] cc;
private void Frm_dqadf_Load(object sender, EventArgs e)
{
x = this.Width;
y = this.Height;
con=new int[Controls.Count][];
cc = new float[Controls.Count];
for (int i = 0; i < Controls.Count; i++)
{
con[i] = new int[4];
con[i][0] = Controls[i].Top;
con[i][1] = Controls[i].Height;
con[i][2] = Controls[i].Left;
con[i][3] = Controls[i].Width;
cc[i] = Controls[i].Font.Size;
}
}
private void Frm_dqadf_Resize(object sender, EventArgs e)
{
float h = this.Height / y;
float w = this.Width / x;
for (int i = 0; i < Controls.Count; i++)
{
Controls[i].Top=(int)(con[i][0]*h);
Controls[i].Height = (int)(con[i][1] * h);
Controls[i].Left = (int)(con[i][2] * w);
Controls[i].Width = (int)(con[i][3] * w);
float currentSize=cc[i]*h;
Controls[i].Font = new Font(Controls[i].Font.Name, currentSize, Controls[i].Font.Style, Controls[i].Font.Unit);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: