C# WinForm表單 控制項隨視窗大小變化而比例改變 [自動透過程式碼調整UI元件大小&起始位置(定位點)&字型大小]
C# WinForm表單 控制項隨視窗大小變化而比例改變 [自動透過程式碼調整UI元件大小&起始位置(定位點)&字型大小]
資料來源:
https://dotblogs.com.tw/davidtalk/2018/06/03/182559
https://www.itread01.com/content/1547625088.html
Code
namespace CS_test { //VS2022 修改軟體版本的方法: //專案 屬性 -> 套件 -> 一般 -> 套件版本 public partial class main : Form { //--- //C# WinForm 控制項隨視窗大小變化而比例改變_start00 // ~ https://dotblogs.com.tw/davidtalk/2018/06/03/182559 // ~ https://www.itread01.com/content/1547625088.html //---C# WinForm 控制項隨視窗大小變化而比例改變_end00 //--- //C# WinForm 控制項隨視窗大小變化而比例改變_start01 private float m_X;//當前窗體的寬度 private float m_Y;//當前窗體的高度 private bool m_isLoaded; // 是否已設定各控制的尺寸資料到Tag屬性 //---C# WinForm 控制項隨視窗大小變化而比例改變_end01 //--- //C# WinForm 控制項隨視窗大小變化而比例改變_start02 //將控制項的寬,高,左邊距,頂邊距和字體大小暫存到tag屬性中 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); } } //---C# WinForm 控制項隨視窗大小變化而比例改變_end02 //--- //C# WinForm 控制項隨視窗大小變化而比例改變_start03 //根據窗體大小調整控制項大小 private void SetControls(float newx, float newy, Control cons) { if (m_isLoaded) { //遍歷窗體中的控制項,重新設置控制項的值 foreach (Control con in cons.Controls) { string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//獲取控制項的Tag屬性值,並分割後存儲字元串數組 float a = System.Convert.ToSingle(mytag[0]) * newx;//根據窗體縮放比例確定控制項的值,寬度 con.Width = (int)a;//寬度 a = System.Convert.ToSingle(mytag[1]) * newy;//高度 con.Height = (int)(a); a = System.Convert.ToSingle(mytag[2]) * newx;//左邊距離 con.Left = (int)(a); a = System.Convert.ToSingle(mytag[3]) * newy;//上邊緣距離 con.Top = (int)(a); Single currentSize = System.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); } } } } //---C# WinForm 控制項隨視窗大小變化而比例改變_end03 public main() { InitializeComponent(); //--- //C# WinForm 控制項隨視窗大小變化而比例改變_start05 m_isLoaded = false;// //---C# WinForm 控制項隨視窗大小變化而比例改變_end05 } private void main_Load(object sender, EventArgs e) { //--- //C# WinForm 控制項隨視窗大小變化而比例改變_start04 m_X = this.Width;//獲取窗體的寬度 m_Y = this.Height;//獲取窗體的高度 m_isLoaded = true;// 已設定各控制項的尺寸到Tag屬性中 SetTag(this);//調用方法 //---C# WinForm 控制項隨視窗大小變化而比例改變_end04 } private void main_Shown(object sender, EventArgs e)//第一次顯示表單 { //--- //C# WinForm 控制項隨視窗大小變化而比例改變_start06 this.WindowState = FormWindowState.Maximized; //---C# WinForm 控制項隨視窗大小變化而比例改變_end06 } private void main_SizeChanged(object sender, EventArgs e) { //--- //C# WinForm 控制項隨視窗大小變化而比例改變_start07 if (m_isLoaded) { float newx = (this.Width) / m_X; float newy = (this.Height) / m_Y; SetControls(newx, newy, this); } //---C# WinForm 控制項隨視窗大小變化而比例改變_end07 } } }
One thought on “C# WinForm表單 控制項隨視窗大小變化而比例改變 [自動透過程式碼調整UI元件大小&起始位置(定位點)&字型大小]”
SizeChanged事件 變成 Resize事件
http://www.aspphp.online/bianchen/dnet/cxiapu/cxprm/201701/185815.html