C# 窗體控件跟隨窗體大小自動調節
阿新 • • 發佈:2017-11-11
c# 控件大小 窗口大小 窗體大小 大小調節 自動調節
測試目的:如何使得窗體內的控件可以跟隨窗體大小自動調節
測試環境:WIN10 ENT + VS2015
方法原理:記錄初始時窗口大小、控件大小等信息。每當窗口大小變化時,計算窗口大小相對於初始時的縮放比例,然後根據縮放比例再調整控件的位置(Location)、大小(Size)、字體大小(Font.Size)。
C#主要測試代碼:
using System; using System.Drawing; using System.Windows.Forms; namespace TEST1111 { 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.Width; igFormHeight = this.Height; InitConTag(this); } 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.Width / (float)igFormWidth; fgHeightScaling = (float)this.Height / (float)igFormHeight; ResizeCon(fgWidthScaling, fgHeightScaling, 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 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]) * widthScaling * heightScaling; con.Font = new Font("", fTmp); if (con.Controls.Count > 0) //處理子控件 { ResizeCon(widthScaling, heightScaling, con); } } } } }
運行初始圖:
窗口大小調節後圖:
可以看到當窗體大小變化後,窗體內的控件位置、大小、字體大小也發生了些許變化。
感謝閱覽!
本文出自 “firswof” 博客,請務必保留此出處http://firswof.blog.51cto.com/9362961/1980896
C# 窗體控件跟隨窗體大小自動調節