C#Winform中使控件大小(包括字体)跟随窗体大小变化而变化

以前一直做伸手党,这回到了自己回报的时候了。
虽然不是什么难题,但对于像我这样的初学者来说,如题这样一个小问题也是困扰了我好几天。

之前上网查了很多相关资料以及一些示例代码但发现其中都有一些错误,而且以我目前的水平也查不出根源来。
之后自己租服务器搭了VPN,出去又找了一波资料,终于找到了完美解决该问题的办法。如下:

 
  
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 控件跟随窗体 { public partial class Form1 : Form { int igFormWidth = new int();//窗口宽度 int igFormHeight = new int();//窗口高度 float fgWidthScaling = new float();//宽度缩放比例 float fgHeightScaling = new float();//高度缩放比例 public Form1() { InitializeComponent(); igFormWidth = this.ClientSize.Width;//将窗口宽度赋值 igFormHeight = this.ClientSize.Height;//将窗口高度赋值 InitConTag(this);//获取窗体控件的初始信息 } private void InitConTag(Control cons)//记录控件集初始的 位置、 大小、 字体大小信息 { foreach (Control con in cons.Controls)//遍历控件集 { con.Tag = con.Left + "," + con.Top + "," + con.Width + "," + con.Height + "," + con.Font.Size;//用一个控件数据对象保存控件信息 if(con.Controls.Count > 0)//处理子控件 { InitConTag(con); } } } private void Form1_Load(object sender, EventArgs e) { } private void Form1_Resize(object sender, EventArgs e) { if (igFormWidth == 0 || igFormHeight == 0) return; fgWidthScaling = (float)this.ClientSize.Width / (float)igFormWidth;//获取窗体变化后新宽度与原宽度的比例 fgHeightScaling = (float)this.ClientSize.Height / (float)igFormHeight;//获取窗体变化后新高度与原高度的比例 ResizeCon(fgWidthScaling, fgHeightScaling, this); } private void ResizeCon(float widthScaling, float heightScaling, Control cons)//重新调整控件的位置、大小、字体大小 { float fTmp = new float(); foreach (Control con in cons.Controls)//遍历控件集 { string[] conTag = con.Tag.ToString().Split(new char[] { ',' }); fTmp = Convert.ToSingle(conTag[0]) * widthScaling; con.Left = (int)fTmp; fTmp = Convert.ToSingle(conTag[1]) * heightScaling; con.Top = (int)fTmp; fTmp = Convert.ToSingle(conTag[2]) * widthScaling; con.Width = (int)fTmp; fTmp = Convert.ToSingle(conTag[3]) * heightScaling; con.Height = (int)fTmp; fTmp = Convert.ToSingle(conTag[4]) * heightScaling; con.Font = new Font("", (fTmp == 0) ? 0.1f : fTmp); if(con.Controls.Count > 0)//处理子控件 { ResizeCon(widthScaling, heightScaling, con); } } }
    } }
希望能帮助到有需要的人。

你可能感兴趣的:(C#Winform中使控件大小(包括字体)跟随窗体大小变化而变化)