在 C# WinForms 開發中,若需在父 Panel 中放置三個子 Panel 並實現「左、中、右三列緊貼、中間自適應寬度、整體隨窗體縮放」的佈局,核心在於正確使用 Dock 屬性與 Z-Order(層級順序)。
Dock 屬性設置:
Dock = DockStyle.LeftDock = DockStyle.RightDock = DockStyle.Fill(有且僅有一個 Fill)Send to Back),左右 Panel 在上層。或在代碼中按順序 Controls.Add:先加中間,再加左、右。DockStyle.Fill 會佔據父容器剩餘的所有客戶區域。Left/Right 會依次從兩側向內佔據空間。// 構造函數或 Load 事件中
panelLeft.Dock = DockStyle.Left;
panelLeft.Width = 200; // 固定寬度
panelRight.Dock = DockStyle.Right;
panelRight.Width = 180;
panelCenter.Dock = DockStyle.Fill; // 自動填充中間
// 關鍵:控件添加順序決定 Z-Order,最先添加者在最底層
this.Controls.Add(panelCenter); // 1. 最底層
this.Controls.Add(panelLeft); // 2.
this.Controls.Add(panelRight); // 3. 最頂層
// 或在設計器中右鍵 panelCenter 選擇 "Send to Back"
AutoScaleMode = AutoScaleMode.Dpi(.NET 4.5+ 推薦)或 Font 縮放。Dock、Anchor、TableLayoutPanel、FlowLayoutPanel 實現響應式佈局。Program.cs 添加:Application.SetHighDpiMode(HighDpiMode.PerMonitorV2);Left → 會重疊,而非並排。Left、右設 Right → 中間寬度固定,不會自適應。