控制項的位置和版面配置 (Windows Forms .NET)
Windows Forms 中的控制項放置不僅由 控制項決定,而且是由控制項的父代決定。 本文說明控制項所提供的不同設定,以及影響配置的不同父容器類型。
重要
.NET 7 和 .NET 6 的桌面指南檔正在建置中。
固定位置與大小
控制項出現在父項上的位置取決於相對於父介面左上角的屬性值 Location 。 父代中的左上方位置座標為 (x0,y0)
。 控制項的大小取決於 屬性, Size 並代表控制項的寬度和高度。
當控制項新增至強制自動放置的父系時,控制項的位置和大小就會變更。 在此情況下,控制項的位置和大小可能無法根據父系的類型手動調整。
MaximumSize和 MinimumSize 屬性有助於設定控制項可以使用的最小和最大空間。
邊界和邊框間距
有兩個控制項屬性可協助精確放置控制項: Margin 和 Padding 。
Margin 屬性可定義控制項周圍的空間,使其他控制項與該控制項的邊框保持指定的距離。
Padding 屬性可定義控制項的內部空間,使控制項的內容 (例如,其 Text 屬性值) 與控制項的邊框保持指定的距離。
下圖顯示 Margin 控制項上的 和 Padding 屬性。
當您定位和調整控制項大小時,Visual Studio 設計工具會遵守這些屬性。 對齊線會顯示為輔助線,以協助您維持在控制項的指定邊界之外。 例如,當您將控制項拖曳到另一個控制項旁邊時,Visual Studio 會顯示貼齊線:
自動放置和大小
控制項可以自動放置在其父系內。 有些父容器會強制放置,而另一些容器則採用引導放置的控制設定。 控制項上有兩個屬性可協助自動放置和大小在父代內: Dock 和 Anchor 。
繪圖順序可能會影響自動放置。 控制項在父 Controls 系集合中由控制項的索引所決定的順序。 這個索引稱為 Z-order 。 每個控制項都會以集合中顯示的反向順序繪製。 也就是說,集合是第一個以最後一個繪製和最後一個繪製集合。
MinimumSize和 MaximumSize 屬性有助於設定控制項可以使用的最小和最大空間。
固定
屬性會 Dock
設定控制項的框線會對齊父系的對應側邊,以及控制項在父系中調整大小的方式。
當控制項停駐時,容器會決定它應該佔用和調整大小的空間,並放置控制項。 控制項的寬度和高度仍會根據停駐樣式來遵守。 例如,如果控制項停駐在頂端,則會遵守 控制項的 , Height 但 Width 會自動調整 。 如果控制項停駐在左邊,則會遵守 控制項的 , Width 但 Height 會自動調整 。
Location控制項的 無法手動設定為停駐控制項自動控制其位置。
Z-order控制項的 會影響停駐。 當停駐控制項配置時,它們會使用可用的空間。 例如,如果控制項先繪製並停駐到頂端,則會佔用容器的整個寬度。 如果下一個控制項停駐在左邊,則其垂直空間較少。
如果控制項反轉,停駐在左邊的 Z-order 控制項現在有更多的初始空間可用。 控制項會使用容器的整個高度。 停駐在頂端的控制項,其水準空間較少。
當容器成長和縮小時,停駐到容器的控制項會重新置放並調整大小,以維持其適用的位置和大小。
如果多個控制項停駐在容器的同一端,則會根據其 Z-order 堆疊。
錨點
錨定控制項可讓您將控制項系結至父容器的一或多個側邊。 當容器大小變更時,任何子控制項都會維持其與錨定端的距離。
控制項可以錨定到一或多個側邊,而不受限制。 錨點是使用 屬性設定的 Anchor 。
自動調整大小
屬性 AutoSize 可讓控制項視需要變更其大小,以符合 屬性所 PreferredSize 指定的大小。 您可以藉由設定 AutoSizeMode
屬性來調整特定控制項的大小調整行為。
只有某些控制項支援 AutoSize 屬性。 此外,某些支援 屬性的 AutoSize 控制項也支援 AutoSizeMode
屬性。
一律為 true 行為 | 描述 |
---|---|
自動調整大小是執行時間功能。 | 這表示它永遠不會成長或縮小控制項,然後沒有進一步的效果。 |
如果控制項變更大小,其 Location 屬性的值一律會維持不變。 | 當控制項的內容導致它成長時,控制項會向右和向下成長。 控制項不會向左成長。 |
當 Dock 為 true 時 AutoSize ,會接受 和 Anchor 屬性。 |
控制項 Location 的 屬性值會調整為正確的值。 控制項 Label 是此規則的例外狀況。 當您將停駐 Label 控制項的 AutoSize 屬性值設定為 true 時, Label 控制項將不會延展。 |
不論其 AutoSize 屬性的值為何,控制項的 MaximumSize 和 MinimumSize 屬性一律都會受到接受。 | MaximumSize和 MinimumSize 屬性不會受到 AutoSize 屬性的影響。 |
預設不會設定最小大小。 | 這表示如果控制項設定為縮小, AutoSize 而且沒有內容,則其 Size 屬性的值是 (0x,0y) 。 在此情況下,您的控制項會縮小到某個點,而且不會立即顯示。 |
如果控制項未實 GetPreferredSize 作 方法,此方法 GetPreferredSize 會傳回指派給 Size 屬性的最後一個值。 | 這表示 將 設定 AutoSize 為 true 不會有任何作用。 |
儲存格中的 TableLayoutPanel 控制項一律會縮小以符合儲存格,直到到達儲存格 MinimumSize 為止。 | 此大小會強制為大小上限。 當儲存格是資料列或資料行的一 AutoSize 部分時,就不是這種情況。 |
AutoSizeMode 屬性
屬性 AutoSizeMode 提供更精細的預設 AutoSize 行為控制。 屬性 AutoSizeMode
會指定控制項如何調整其內容的大小。 例如,內容可以是控制項的文字 Button 或容器的子控制項。
下列清單顯示 AutoSizeMode
值及其行為。
-
控制項會成長或縮小以包含其內容。
會 MinimumSize 接受 和 MaximumSize 值,但會忽略 屬性的 Size 目前值。
這與具有 AutoSize 屬性的控制項和沒有
AutoSizeMode
屬性的行為相同。 -
控制項會視需要增加以包含其內容,但不會縮小其 屬性所 Size 指定的值。
這是
AutoSizeMode
的預設值。
支援 AutoSize 屬性的控制項
下表描述控制項自動調整大小支援的層級:
控制 | AutoSize 支援 |
AutoSizeMode 支援 |
---|---|---|
Button | ✔️ | ✔️ |
CheckedListBox | ✔️ | ✔️ |
FlowLayoutPanel | ✔️ | ✔️ |
Form | ✔️ | ✔️ |
GroupBox | ✔️ | ✔️ |
Panel | ✔️ | ✔️ |
TableLayoutPanel | ✔️ | ✔️ |
CheckBox | ✔️ | ❌ |
DomainUpDown | ✔️ | ❌ |
Label | ✔️ | ❌ |
LinkLabel | ✔️ | ❌ |
MaskedTextBox | ✔️ | ❌ |
NumericUpDown | ✔️ | ❌ |
RadioButton | ✔️ | ❌ |
TextBox | ✔️ | ❌ |
TrackBar | ✔️ | ❌ |
CheckedListBox | ❌ | ❌ |
ComboBox | ❌ | ❌ |
DataGridView | ❌ | ❌ |
DateTimePicker | ❌ | ❌ |
ListBox | ❌ | ❌ |
ListView | ❌ | ❌ |
MaskedTextBox | ❌ | ❌ |
MonthCalendar | ❌ | ❌ |
ProgressBar | ❌ | ❌ |
PropertyGrid | ❌ | ❌ |
RichTextBox | ❌ | ❌ |
SplitContainer | ❌ | ❌ |
TabControl | ❌ | ❌ |
TabPage | ❌ | ❌ |
TreeView | ❌ | ❌ |
WebBrowser | ❌ | ❌ |
ScrollBar | ❌ | ❌ |
在設計環境中自動調整大小
下表根據控制項 AutoSize 和 AutoSizeMode
屬性的值,在設計階段描述控制項的大小調整行為。
覆寫 屬性, SelectionRules 以判斷指定的控制項是否處於使用者可調整大小的狀態。 在下表中,「無法調整大小」只表示「可以調整大小」表示 MoveableAllSizeable 和 Moveable 。
AutoSize 設定 |
AutoSizeMode 設定 |
行為 |
---|---|---|
true |
屬性無法使用。 | 使用者無法在設計階段調整控制項的大小,但下列控制項除外: - TextBox - MaskedTextBox - RichTextBox - TrackBar |
true |
GrowAndShrink | 使用者無法在設計階段調整控制項的大小。 |
true |
GrowOnly | 使用者可以在設計階段調整控制項的大小。 Size設定 屬性時,使用者只能增加控制項的大小。 |
false 或 AutoSize 已隱藏 |
不適用。 | 使用者可以在設計階段調整控制項的大小。 |
注意
為了將生產力最大化,Visual Studio 中的 Windows Forms 設計工具會 AutoSize 遮蔽 類別的 Form 屬性。 在設計階段,無論其實際設定為何,表單的行為就 AutoSize 如同 屬性設定為 false
。 在執行時間,不會建立任何特殊的住宿,而且 AutoSize 屬性會套用為屬性設定所指定。
容器:表單
Form是 Windows Forms 的主要物件。 Windows Forms 應用程式通常會隨時顯示表單。 表單包含控制項,並遵守 Location 控制項的 和 Size 屬性,以進行手動放置。 表單也會回應 Dock 屬性以進行自動放置。
表單大部分時間都會在邊緣上擁有控制項,讓使用者調整表單大小。 控制項 Anchor 的 屬性會讓控制項隨著表單調整大小而成長和縮小。
容器:面板
控制項 Panel 與表單類似,因為它只會將控制項群組在一起。 它支援表單執行的相同手動和自動放置樣式。 如需詳細資訊,請參閱 容器:表單 一節。
面板會順暢地與父系混合,而且會切斷超出面板界限之控制項的任何區域。 如果控制項落在面板界限之外,而且 AutoScroll 設定為 true
,則會出現捲軸,而且使用者可以捲動面板。
與群組框 控制項不同,面板沒有標題和框線。
上圖具有屬性設定為 BorderStyle 示範面板界限的面板。
容器:群組方塊
控制項 GroupBox 提供其他控制項的可識別群組。 一般而言,您會使用群組方塊來依函式細分表單。 例如,您可能有一個代表個人資訊的表單,而與位址相關的欄位會分組在一起。 在設計階段,可以輕鬆地將群組方塊與其自主控制項一起移動。
群組方塊支援表單執行的相同手動和自動放置樣式。 如需詳細資訊,請參閱 容器:表單 一節。 群組框也會切斷超出面板界限之控制項的任何部分。
與面板 控制項不同,群組方塊無法捲動內容並顯示捲軸。
容器:流程配置
FlowLayoutPanel 控制項會以水平或垂直的流動方向來排列其內容。 您可以將控制項的內容從一個資料列包裝至下一個資料列,或從一個資料行包裝至下一個資料行。 或者,您可以用裁剪的方式,而不是包裝其內容。
您可以設定 FlowDirection 屬性的值來指定文字方向。 FlowLayoutPanel 控制項會在「由右至左 (RTL)」配置中,將其文字方向正確地反轉。 您也可以設定 WrapContents 屬性的值,指定要包裝或裁剪 FlowLayoutPanel 控制項的內容。
當您將 AutoSize 屬性設為 true
時,FlowLayoutPanel 控制項會根據其內容自動調整大小。 它也會為其子控制項提供 FlowBreak
屬性。 將 屬性的值 FlowBreak
設定為 true
,讓 FlowLayoutPanel 控制項停止在目前流程方向配置控制項,並換行至下一個資料列或資料行。
上圖有兩 FlowLayoutPanel
個 控制項, BorderStyle 屬性設定為示範控制項界限。
容器:資料表配置
TableLayoutPanel 控制項會在格線中排列其內容。 因為配置是在設計階段和執行時間完成的,所以在應用程式環境變更時可以動態變更。 這可讓面板中的控制項能夠按比例調整大小,以便回應變更,例如父控制項大小調整或文字長度變更,因為當地語系化。
任何 Windows Form 控制項都可以是 TableLayoutPanel 控制項的子系,包括 TableLayoutPanel 的其他執行個體。 這可讓您建構在執行階段適應變更的複雜配置。
您也可以在 TableLayoutPanel 控制項已完全充滿子控制項之後,控制展開的方向 (水平或垂直)。 TableLayoutPanel 控制項預設會向下加入資料列來展開。
您可以使用 和 ColumnStyles 屬性來控制資料列和資料行的大小和 RowStyles 樣式。 您可以個別設定資料列或資料行的屬性。
TableLayoutPanel 控制項會將下列屬性加入其子控制項:Cell
、Column
、Row
、ColumnSpan
和 RowSpan
。
上圖有一個資料表, CellBorderStyle 其 屬性設定為示範每個儲存格的界限。
容器:分割容器
Windows Forms SplitContainer 控制項可以視為複合控制項;它是兩個面板,以可移動的列分隔。 將滑鼠指標移到分隔列上時,指標會變更形狀,以顯示分隔列是可移動的。
SplitContainer透過 控制項,您可以建立複雜的使用者介面;一個面板中的選取專案通常會決定另一個面板中所顯示的物件。 這種安排對於顯示和流覽資訊很有效。 擁有兩個面板可讓您匯總區域中的資訊,而列或「分隔器」可讓您輕鬆地調整面板的大小。
上圖具有分割容器,可建立左窗格和右窗格。 右窗格包含第二個分割容器, Orientation 並將 設定為 Vertical 。 屬性 BorderStyle 會設定為示範每個面板的界限。
容器:索引標籤控制項
會顯示 TabControl 多個索引標籤,例如筆記本中的分隔符號,或檔案櫃中一組資料夾中的標籤。 索引標籤可以包含圖片和其他控制項。 使用索引標籤控制項來產生在 Windows 作業系統中出現許多位置的多頁對話方塊種類,例如主控台和顯示內容。 此外, TabControl 可以用來建立屬性頁,用來設定一組相關的屬性。
最重要的屬性 TabControl 是 TabPages ,其中包含個別索引標籤。 每個個別索引標籤都是 TabPage 物件。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應