C#窗體設計:[9]自動調整控制元件大小?

根據視窗的大小自動調整控制元件大小

工具/原料

Microsoft Visual Studio 2015

方法/步驟

新建一個C#應用程式,應用程式命名為Change

C#窗體設計:[9]自動調整控制元件大小

窗體設計:[9]自動調整控制元件大小#

窗體介面設計如下

C#窗體設計:[9]自動調整控制元件大小

窗體設計:[9]自動調整控制元件大小#

雙擊窗體新增Load()函式,函式中新增一下程式碼:

private void Form1_Load(object sender, EventArgs e)

{

this.Resize += new EventHandler(Form1_Resize);//窗體調整大小時引發事件

X = this.Width;//獲取窗體的寬度

Y = this.Height;//獲取窗體的高度

setTag(this);//呼叫方法

}

C#窗體設計:[9]自動調整控制元件大小

窗體設計:[9]自動調整控制元件大小#

獲取控制元件的width、height、left、top、字型大小的值,新增一下程式碼:

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#窗體設計:[9]自動調整控制元件大小

窗體設計:[9]自動調整控制元件大小#

根據窗體大小調整控制元件大小,新增一下程式碼:

private void setControls(float newx, float newy, Control cons)

{

//遍歷窗體中的控制元件,重新設定控制元件的值

foreach (Control con in cons.Controls)

{

string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//獲取控制元件的Tag屬性值,並分割後儲存字串陣列

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);

}

}

}

C#窗體設計:[9]自動調整控制元件大小

窗體設計:[9]自動調整控制元件大小#

對窗體新增Resize()函式

void Form1_Resize(object sender, EventArgs e)

{

float newx = (this.Width) / X; //窗體寬度縮放比例

float newy = this.Height / Y;//窗體高度縮放比例

setControls(newx, newy, this);//隨窗體改變控制元件大小

this.Text = this.Width.ToString() + " " + this.Height.ToString();//窗體標題欄文字

}

C#窗體設計:[9]自動調整控制元件大小

窗體設計:[9]自動調整控制元件大小#

程式執行如下:

C#窗體設計:[9]自動調整控制元件大小

窗體設計:[9]自動調整控制元件大小#

C#窗體設計:[9]自動調整控制元件大小

窗體設計:[9]自動調整控制元件大小#

注意事項

注意函式的新增

控制元件, 窗體,
相關問題答案