在開發 C# Windows Forms 應用程式時,如果你需要讓控制項「自動排列、隨視窗大小調整」,那 FlowLayoutPanel 會是非常好用的工具。
它可以幫你做到:👉 自動排列控制項
👉 視窗縮放時自動換行 👉 超出範圍自動出現捲軸
這篇就帶你快速上手 FlowLayoutPanel 的核心用法!
🧩 什麼是 FlowLayoutPanel?
FlowLayoutPanel 是一種「流式佈局容器」,裡面的控制項會像文字一樣:
👉 由左到右排列
👉 空間不夠就自動換行
非常適合用在:
- 動態按鈕列表
- 卡片式 UI
- 工具列 / 快捷功能區
🚀 Step 1:建立 FlowLayoutPanel
private FlowLayoutPanel flowLayoutPanel1;private void MainForm_Load(object sender, EventArgs e){ flowLayoutPanel1 = new FlowLayoutPanel(); flowLayoutPanel1.FlowDirection = FlowDirection.LeftToRight; flowLayoutPanel1.WrapContents = true; flowLayoutPanel1.AutoScroll = true; flowLayoutPanel1.Dock = DockStyle.Fill; this.Controls.Add(flowLayoutPanel1);}
🔍 重要屬性說明
🔹 FlowDirection(排列方向)
flowLayoutPanel1.FlowDirection = FlowDirection.LeftToRight;
可選:
LeftToRightTopDownRightToLeftBottomUp
🔹 WrapContents(是否換行)
flowLayoutPanel1.WrapContents = true;
✔ true:空間不夠會自動換行
❌ false:會一直延伸(可能超出畫面)
🔹 AutoScroll(自動捲軸)
flowLayoutPanel1.AutoScroll = true;
👉 當內容超出範圍時,自動出現捲動條
🔹 Dock(填滿容器)
flowLayoutPanel1.Dock = DockStyle.Fill;
👉 讓 Panel 填滿整個視窗
🚀 Step 2:動態加入控制項
private void CreateControls(){ for (int i = 1; i <= 3; i++) { Button btn = new Button(); btn.Text = $"按鈕{i}"; btn.Size = new System.Drawing.Size(100, 30); btn.Click += button_Click; flowLayoutPanel1.Controls.Add(btn); }}
🖱️ Step 3:事件處理
private void button_Click(object sender, EventArgs e){ Button btn = (Button)sender; MessageBox.Show($"你按下了:{btn.Text}");}
⚠️ 原始範例常見問題(幫你補強)
你的原始寫法有一個關鍵問題👇
👉 flowLayoutPanel1 沒有宣告成成員變數
👉 在不同方法中會抓不到
✔ 正確做法:
private FlowLayoutPanel flowLayoutPanel1;
🧠 實務技巧(很重要)
🔹 控制項間距
btn.Margin = new Padding(5);
👉 讓 UI 不會擠在一起
🔹 控制項自動大小
btn.AutoSize = true;
🔹 固定每行數量(進階)
可以搭配 Panel 寬度控制,或改用:
👉 TableLayoutPanel(如果需要更精準格狀排版)
🚀 延伸應用(你可以這樣用)
FlowLayoutPanel 很適合拿來做:
- 🔹 快捷工具列(像你現在做的工具)
- 🔹 動態產生按鈕(例如分類、標籤)
- 🔹 檔案列表 UI
- 🔹 卡片式介面
✨ 結語
FlowLayoutPanel 的核心價值就是:
✔ 自動排版
✔ 減少手動計算座標 ✔ UI 更有彈性
如果你正在做 WinForms 工具(像你現在的專案),這個控制項其實非常實用 👍













