C#控件随窗体大小自动调整

构造函数中:

int count = this.Controls.Count * 2 + 2;

float [] factor=new float [count];

int i = 0;

factor[i++] = Size.Width;

factor[i++] = Size.Height;

foreach (Control ctrl in this.Controls)

{

factor[i++] = ctrl.Location.X / (float)Size.Width;

factor[i++] = ctrl.Location.Y / (float)Size.Height;

ctrl.Tag = ctrl.Size;

}

Tag = factor;

为控件的TAG属性加入大小

Resize事件中自动调整大小

private void Summary_Resize(object sender, EventArgs e)

{

float[] scale = (float[])Tag;

int i = 2;

foreach (Control ctrl in this.Controls)

{

ctrl.Left = (int)(Size.Width * scale[i++]);

ctrl.Top = (int)(Size.Height * scale[i++]);

ctrl.Width = (int)(Size.Width / (float)scale[0] * ((Size)ctrl.Tag).Width);

ctrl.Height = (int)(Size.Height / (float)scale[1] * ((Size)ctrl.Tag).Height);

}

}