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, 照搬,哈哈哈~~~