https://www.cnblogs.com/sakalaka/p/5135230.html 及 https://blog.csdn.net/qq_36526650/article/details/78442382
编写完程序后,运行时发现窗体放大后控件保持原来的属性,很丑,哈哈哈~~~从网上搜索如何控件与窗体同比例缩放,很庆幸,一下子找到第二个链接,然后进第一个链接学习到了,简单易懂。下方的是防止自己忘记又需要重新理解的笔记。
1. 定义2个全局float 变量X,Y,用来记录窗体默认窗口时的宽度和高度。
float X; //默认窗口的宽度
float Y; //默认窗口的高度
2. 窗体Load的时候将窗体的宽度、高度赋值给X、Y。
private void Form1_Load(object sender, EventArgs e)
{
X = this.Width; //将窗体的宽度赋值给X
Y = this.Height; //将窗体的高度赋值给Y
setTag(this); //调用setTag函数(下一步介绍)
}
3. 窗体Load的时候调用setTag函数(第2步最后的语句)将窗体上所有子控件的宽度、高度、左边距、顶部距离及字体大小暂存起来。
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); //如果此控件存在子控件,则此控件的子控件执行此函数一次
}
}
4. 窗体缩放时,计算出相应的缩放比例,然后通过缩放比例参数调用setControls函数,改变窗体上所有子控件的宽度、高度、左边距、顶部距离及字体大小的信息。
4.1 计算缩放比例
private void Form1_Resize(object sender, EventArgs e)
{
float newx= (this.Width) / X; //窗体宽度缩放比例
float newy= (this.Height) / Y; //窗体高度缩放比例
setControls(newx, newy, this); //调用setControls函数(下一小步介绍)
}
4.2 通过缩放比例,改变窗体上所有子控件的宽度、高度、左边距、顶部距离及字体大小的信息。
private void setControls(float newx, float newy, Control cons)
{
foreach (Control con in cons.Controls)
{
string[] myTag = con.Tag.ToString().Split(':'); //将con的宽、高、左边距、顶边距离及字体大小通过字符“:”分割成数组
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) setControls(newx, newy, con); //如果此控件存在子控件,则将相应子控件执行一次setControls函数
}
}
OK OK OK, 照搬,哈哈哈~~~