C#如何讓控制元件隨著窗體變化大小
阿新 • • 發佈:2018-12-12
分析需求
各位請看這個小窗體,我把這控制元件按陣型依次排開, 可當我讓窗體全屏顯示的時候,問題就出來了!如圖
如何全屏顯示窗體裡的控制元件
採用Form_Resize()。思路是窗體變化時,直接重寫這個變化函式。具體做法是要將原來窗體的屬性以及各個控制元件的所佔位置的比例存入Tag中(Tag可以存任何東西哦!)。
在public Form1窗體中程式碼(我的Form名稱是FrmQueryBalance)
public FrmQueryBalance() { InitializeComponent(); //最大化窗體 this.WindowState = FormWindowState.Maximized; //控制元件隨窗體全屏顯示 int count = this.Controls.Count * 2 + 2; float[] factor = new float[count]; int i = 0; factor[i++] = Size.Width; factor[i++] = Size.Height; foreach (Control ctrl in this.Controls) { factor[i++] = ctrl.Location.X / (float)Size.Width; factor[i++] = ctrl.Location.Y / (float)Size.Height; ctrl.Tag = ctrl.Size;//!!! } Tag = factor; }
在控制元件所在窗體的Resize事件中寫入如下程式碼
private void FrmQueryBalance_Resize(object sender, EventArgs e) { //控制元件隨窗體全屏顯示 float[] scale = (float[])Tag; int i = 2; foreach (Control ctrl in this.Controls) { ctrl.Left = (int)(Size.Width * scale[i++]); ctrl.Top = (int)(Size.Height * scale[i++]); ctrl.Width = (int)(Size.Width / (float)scale[0] * ((Size)ctrl.Tag).Width);//!!! ctrl.Height = (int)(Size.Height / (float)scale[1] * ((Size)ctrl.Tag).Height);//!!! //每次使用的都是最初始的控制元件大小,保證準確無誤。 } }
我們可以直接來看下效果,控制元件隨窗體的變化而變化位置了
如何使窗體全屏顯示時,不被系統工作列所蓋住
你以為這篇部落格要結束了嗎,當然不能夠。現在我在窗體下面加兩個label
全屏顯示時,是這樣的!那麼有辦法解決嗎?當然有!
請在這個窗體的public事件中寫上這一行程式碼
public FrmMain() { InitializeComponent(); //最大化窗體 this.WindowState = System.Windows.Forms.FormWindowState.Maximized; //全屏窗體時內容不受工作列影響 this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea; }
解決問題~