[C#] 實作流式佈局 - FlowLayoutPanel

更新於 發佈於 閱讀時間約 5 分鐘
raw-image

在開發 C# Windows Forms 應用程式時,我們經常需要將多個控制項以流式佈局排列,以便在不同大小的視窗或面板中適應佈局變化。這時,FlowLayoutPanel 是一個非常實用的容器控制項,它可以自動調整子控制項的位置,使其按照流式佈局排列。本篇教學將帶你透過一個簡單的例子,學會如何在 C# 中使用 FlowLayoutPanel

設定 FlowLayoutPanel 的屬性

MainForm_Load 事件處理方法中,我們將設定 FlowLayoutPanel 的一些屬性,以確保流式佈局正常運作。以下是幾個重要的屬性:

private void MainForm_Load(object sender, EventArgs e)
{
// 建立 FlowLayoutPanel 控制項
FlowLayoutPanel flowLayoutPanel1 = new FlowLayoutPanel();
flowLayoutPanel1.FlowDirection = FlowDirection.LeftToRight;
flowLayoutPanel1.WrapContents = true;
flowLayoutPanel1.AutoScroll = true;
flowLayoutPanel1.Dock = DockStyle.Fill; // 佔滿整個視窗
}
  • FlowDirection 屬性指定子控制項排列的方向。在這裡,我們選擇從左到右排列。
  • WrapContents 屬性指定是否在達到容器邊界時換行。這裡我們設定為 true,這樣當視窗大小不足容納所有子控制項時,會換行排列。
  • AutoScroll 屬性指定當容器不足以顯示所有子控制項時,是否自動顯示捲軸。這樣,即使子控制項超出視窗範圍,我們也可以捲動查看它們。

設定子控制項的大小和事件處理方法

MainForm_Load 事件中,我們也可以設定子控制項的大小和事件處理方法。

using System;
using System.Windows.Forms;

namespace FlowLayoutPanelDemo
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
CreateControls();
}

private void CreateControls()
{
// 建立按鈕控制項
Button button1 = new Button();
button1.Text = "按鈕1";
button1.Size = new System.Drawing.Size(100, 30);
button1.Click += new EventHandler(button_Click);

Button button2 = new Button();
button2.Text = "按鈕2";
button2.Size = new System.Drawing.Size(100, 30);
button2.Click += new EventHandler(button_Click);

Button button3 = new Button();
button3.Text = "按鈕3";
button3.Size = new System.Drawing.Size(100, 30);
button3.Click += new EventHandler(button_Click);

// 加入子控制項到 FlowLayoutPanel
flowLayoutPanel1.Controls.Add(button1);
flowLayoutPanel1.Controls.Add(button2);
flowLayoutPanel1.Controls.Add(button3);

// 加入 FlowLayoutPanel 到主視窗
this.Controls.Add(flowLayoutPanel1);
}
}
}

實作子控制項的事件處理方法

最後,我們為子控制項的事件處理方法 button_Click 添加一些簡單的邏輯。

private void button_Click(object sender, EventArgs e)
{
// 在這裡可以寫點擊按鈕後的處理邏輯
MessageBox.Show($"你按下了按鈕:{((Button)sender).Text}");
}

這將使你的應用程式更靈活地適應不同大小的視窗或面板,並且可以自動調整子控制項的位置。這只是 FlowLayoutPanel 的基本用法,你可以根據你的需求添加更多子控制項和處理更多事件,以建立更豐富和互動的應用程式。

avatar-img
68會員
126內容數
這裡將以輕鬆風格,深入探討程式設計的基礎和高級概念。從程式語言到演算法,我們將以易懂的方式解釋每個主題,讓你輕鬆掌握。無論你是初學者或有經驗者,都能在這裡找到適合你的內容。無論你的目標是成為專業開發者還是擴展知識,我們都會陪伴你一同成長!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
程式輕鬆玩 的其他內容
在這篇教學中,我們將學習如何在C#程式中取得系統時間並進行格式化,以滿足不同需求的日期和時間顯示。
在專案中,使用NuGet套件管理員來安裝Microsoft.Office.Interop.Excel套件。這個套件將幫助我們與Excel進行互動。
在這篇教學中,我們將學習如何在C#程式碼中使用字串插值來加入變數。字串插值是一種方便且易讀的方式,讓我們可以將變數值插入到字串中,而不必使用傳統的串接方法。現在,讓我們開始吧! 在這個範例中,我們將創建一個簡單的應用程式,使用字串插值在螢幕上顯示一條個人訊息。這個訊息包含姓名、年齡和城市。 us
在現代科技的快速發展下,AI繪圖工具已成為許多創作者的得力助手。我有幸使用這些工具,並深感它們對創作過程的影響。
在現代科技快速發展的時代,學習程式設計已經成為一項重要的技能。無論年齡如何,程式設計都可以為人們帶來許多價值和益處。從幼童到老年人,學習程式設計不僅能夠培養邏輯思維,還能提升解決問題的能力和創造力。讓我們一起探討在各個年齡層中學習程式設計的重要性,並看看它如何在不同階段深化思維和進行系統化整理。
那是我第一次參加露營活動,選擇了新竹山作為目的地。我興奮地到場搭建帳篷,雖然花了不少時間,但最終還是成功地完成了。下午我們盡情地享受了整個下午,玩得開心滿足。 晚餐時,我們圍在營火旁烤肉,大家談笑風生,歡聲笑語充斥著整個露營地。我感受到與自然和諧相處的美好時光,這樣的體驗令我心情愉悅。
在這篇教學中,我們將學習如何在C#程式中取得系統時間並進行格式化,以滿足不同需求的日期和時間顯示。
在專案中,使用NuGet套件管理員來安裝Microsoft.Office.Interop.Excel套件。這個套件將幫助我們與Excel進行互動。
在這篇教學中,我們將學習如何在C#程式碼中使用字串插值來加入變數。字串插值是一種方便且易讀的方式,讓我們可以將變數值插入到字串中,而不必使用傳統的串接方法。現在,讓我們開始吧! 在這個範例中,我們將創建一個簡單的應用程式,使用字串插值在螢幕上顯示一條個人訊息。這個訊息包含姓名、年齡和城市。 us
在現代科技的快速發展下,AI繪圖工具已成為許多創作者的得力助手。我有幸使用這些工具,並深感它們對創作過程的影響。
在現代科技快速發展的時代,學習程式設計已經成為一項重要的技能。無論年齡如何,程式設計都可以為人們帶來許多價值和益處。從幼童到老年人,學習程式設計不僅能夠培養邏輯思維,還能提升解決問題的能力和創造力。讓我們一起探討在各個年齡層中學習程式設計的重要性,並看看它如何在不同階段深化思維和進行系統化整理。
那是我第一次參加露營活動,選擇了新竹山作為目的地。我興奮地到場搭建帳篷,雖然花了不少時間,但最終還是成功地完成了。下午我們盡情地享受了整個下午,玩得開心滿足。 晚餐時,我們圍在營火旁烤肉,大家談笑風生,歡聲笑語充斥著整個露營地。我感受到與自然和諧相處的美好時光,這樣的體驗令我心情愉悅。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在本章中,我們探討了CSS Grid佈局的基本概念和應用。CSS Grid提供了一個強大而靈活的二維佈局系統,使得處理複雜的網頁佈局變得更加簡單和直觀。我們學習了如何設置Grid容器和Grid項目,以及如何使用各種Grid屬性來定義和管理佈局。
Thumbnail
在這一章節中,我們介紹了 Flexbox 這個 CSS 模型及其用法,重點講解了 Flex 容器和項目的各種屬性。通過具體的示例,展示了如何使用 Flexbox 進行一維佈局設計,並且通過實踐案例,展示了多行 Flex 項目和不同對齊方式的應用。
Thumbnail
浮動(float)是早期用來創建佈局的技術。元素可以向左或向右浮動,旁邊的元素會環繞浮動元素。浮動元素通常用於圖文混排或簡單的兩欄佈局。
1.justify-content 用來控制主軸(水平)如何分配對齊 如果要改垂直對齊的話+上 flex-direction : column 2.align-item 他是控制子項目再交叉軸(垂直)的對齊方式 3.flex-shrink 收縮性! 當空間不足時預設會是1,等於是
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
本文是C#入門教程的一部分,涵蓋了流程控制的各種語句與迴圈。這包括if、else if和else語句,三元運算子,switch語句,以及for、foreach和while迴圈。文中還介紹了如何在迴圈中使用break、continue、return和goto語句。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
這篇文章,會帶著大家複習以前學過的滑動窗口(Sliding window)框架, 並且滿足特定區間的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 滑動窗口(Sliding window)框架示意圖 滑動窗口(Sliding window)的框架
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在本章中,我們探討了CSS Grid佈局的基本概念和應用。CSS Grid提供了一個強大而靈活的二維佈局系統,使得處理複雜的網頁佈局變得更加簡單和直觀。我們學習了如何設置Grid容器和Grid項目,以及如何使用各種Grid屬性來定義和管理佈局。
Thumbnail
在這一章節中,我們介紹了 Flexbox 這個 CSS 模型及其用法,重點講解了 Flex 容器和項目的各種屬性。通過具體的示例,展示了如何使用 Flexbox 進行一維佈局設計,並且通過實踐案例,展示了多行 Flex 項目和不同對齊方式的應用。
Thumbnail
浮動(float)是早期用來創建佈局的技術。元素可以向左或向右浮動,旁邊的元素會環繞浮動元素。浮動元素通常用於圖文混排或簡單的兩欄佈局。
1.justify-content 用來控制主軸(水平)如何分配對齊 如果要改垂直對齊的話+上 flex-direction : column 2.align-item 他是控制子項目再交叉軸(垂直)的對齊方式 3.flex-shrink 收縮性! 當空間不足時預設會是1,等於是
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
本文是C#入門教程的一部分,涵蓋了流程控制的各種語句與迴圈。這包括if、else if和else語句,三元運算子,switch語句,以及for、foreach和while迴圈。文中還介紹了如何在迴圈中使用break、continue、return和goto語句。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
這篇文章,會帶著大家複習以前學過的滑動窗口(Sliding window)框架, 並且滿足特定區間的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 滑動窗口(Sliding window)框架示意圖 滑動窗口(Sliding window)的框架
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val