C#中怎样使控件随着窗体一起变化大小

时间:2025-03-07 19:35:44

此文原作者为****的 zhouwen5288,原文链接  http://blog.****.net/zhouwen5288/article/details/6493835

   本人仅作为随笔备忘,转载请联系原作者

以下是摘录的文章内容,声明仅作为本人的备忘

  -----------------------------------------------------------------------

经过本人的修改与测试,下面的代码准确无误。

public Form1()
{
InitializeComponent();
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;
}

private void Form1_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);

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

注意点和误区。千万不要使用Scale这个函数,这个函数很诱人,似乎可以改变控件大小,这个函数用了SizeF这个结构,然而第一改变比如最大化后是对的,但是你还原后一切都不是那么回事了。我也不知道是怎么回事。程序反正是不对的。如果有朋友使用过可以告诉我,谢谢。

还有人使用resize32.ocx这个控件。这个控件.net框架似乎不存在。所以不加以评论