Umístění a rozložení ovládacích prvků (model Windows Forms .NET)

Umístění ovládacího prvku v model Windows Forms určuje nejen ovládací prvek, ale také nadřazený prvek ovládacího prvku. Tento článek popisuje různá nastavení poskytovaná ovládacími prvky a různými typy nadřazených kontejnerů, které ovlivňují rozložení.

Důležité

Dokumentace k desktopové příručce pro .NET 7 a .NET 6 se právě připravuje.

Pevná pozice a velikost

Pozice ovládacího prvku je určena hodnotou Location vlastnosti vzhledem k levému hornímu rohu nadřazeného povrchu. Souřadnice pozice vlevo nahoře v nadřazené části je (x0,y0). Velikost ovládacího prvku je určena Size vlastností a představuje šířku a výšku ovládacího prvku.

Location of the control relative to the container

Když se ovládací prvek přidá do nadřazeného objektu, který vynucuje automatické umístění, změní se umístění a velikost ovládacího prvku. V tomto případě nemusí být umístění a velikost ovládacího prvku ručně upraveny v závislosti na typu nadřazeného prvku.

MinimumSize Vlastnosti MaximumSize pomáhají nastavit minimální a maximální prostor, který může ovládací prvek použít.

Okraje a odsazení

Existují dvě vlastnosti ovládacího prvku, které pomáhají s přesným umístěním ovládacích prvků: Margin a Padding.

Vlastnost Margin definuje prostor kolem ovládacího prvku, který udržuje jiné ovládací prvky zadanou vzdálenost od ohraničení ovládacího prvku.

Vlastnost Padding definuje prostor v interiéru ovládacího prvku, který udržuje obsah ovládacího prvku (například hodnotu jeho Text vlastnosti) zadanou vzdálenost od ohraničení ovládacího prvku.

Následující obrázek znázorňuje Margin vlastnosti ovládacího prvku a Padding vlastnosti.

Padding and Margin properties for Windows Forms Controls

Návrhář sady Visual Studio bude tyto vlastnosti respektovat při umístění a změně velikosti ovládacích prvků. Přichycení se zobrazí jako vodítka, která vám pomůžou zůstat mimo zadaný okraj ovládacího prvku. Visual Studio například zobrazí při přetažení ovládacího prvku vedle jiného ovládacího prvku přichycení:

Animated image demonstrating the snaplines with margin properties for Windows Forms .NET in Visual Studio

Automatické umístění a velikost

Ovládací prvky lze automaticky umístit do nadřazeného objektu. Některé nadřazené kontejnery vynucují umístění, zatímco jiné respektují nastavení řízení, která řídí umístění. Ovládací prvek má dvě vlastnosti, které pomáhají automatickému umístění a velikosti v rámci nadřazeného objektu: Dock a Anchor.

Pořadí výkresu může mít vliv na automatické umístění. Pořadí, ve kterém je ovládací prvek nakreslen indexem ovládacího prvku v nadřazené kolekci Controls . Tento index se označuje jako Z-order. Každý ovládací prvek se nakreslí v obráceném pořadí, ve které se zobrazí v kolekci. To znamená, že kolekce je kolekce nakreslená jako první a poslední v první.

MaximumSize Vlastnosti MinimumSize pomáhají nastavit minimální a maximální prostor, který může ovládací prvek použít.

Dock

Vlastnost Dock nastaví, které ohraničení ovládacího prvku je zarovnané na odpovídající stranu nadřazeného objektu, a způsob změny velikosti ovládacího prvku v rámci nadřazeného prvku.

Windows form with buttons with dock settings.

Když je ovládací prvek ukotvený, kontejner určuje prostor, který by měl zabírat a měnit velikost a umístí ovládací prvek. Šířka a výška ovládacího prvku se stále respektují na základě stylu ukotvení. Pokud je například ovládací prvek ukotvený k horní části, je tento ovládací prvek respektován, Height ale Width automaticky se upraví. Pokud je ovládací prvek ukotvený vlevo, je tento ovládací prvek dodržen, Width ale Height automaticky se upraví.

Ovládací Location prvek nelze nastavit ručně jako ukotvení ovládacího prvku automaticky řídí jeho pozici.

Ovládací Z-order prvek má vliv na ukotvení. Vzhledem k tomu, že jsou ukotvené ovládací prvky rozloženy, používají prostor, který je jim k dispozici. Pokud je například ovládací prvek nakreslen jako první a ukotvený k horní části, převezme celou šířku kontejneru. Pokud je další ovládací prvek ukotvený vlevo, má menší svislý prostor, který je pro něj k dispozici.

Windows form with buttons docked to the left and top with top being bigger.

Pokud je ovládací prvek obrácený, ovládací prvek Z-order , který je ukotvený vlevo, má nyní k dispozici více počátečního místa. Ovládací prvek používá celou výšku kontejneru. Ovládací prvek, který je ukotvený k horní části, má méně vodorovného prostoru k dispozici.

Windows form with buttons docked to the left and top with left being bigger.

S rostoucím a zmenšujícím se kontejnerem se ovládací prvky ukotvené k kontejneru přemísťují a mění jejich velikost, aby se zachovaly příslušné pozice a velikosti.

Animation showing how A Windows Form with buttons docked in all positions is resized.

Pokud je více ovládacích prvků ukotvených na stejné straně kontejneru, jsou naskládané podle jejich Z-order.

Windows form with two buttons docked to the left.

Záložka

Ukotvení ovládacího prvku umožňuje spojit ovládací prvek s jednou nebo více stranami nadřazeného kontejneru. Při změně velikosti kontejneru bude každý podřízený ovládací prvek udržovat svou vzdálenost k ukotvené straně.

Ovládací prvek lze ukotvit na jednu nebo více stran bez omezení. Ukotvení je nastaveno s Anchor vlastností.

Animation showing how A Windows Form with buttons anchored in all positions is resized.

Automatická změna velikosti

Vlastnost AutoSize umožňuje, aby ovládací prvek v případě potřeby změnil jeho velikost tak, aby odpovídal velikosti určené PreferredSize vlastností. Chování nastavení velikosti pro konkrétní ovládací prvky upravíte nastavením AutoSizeMode vlastnosti.

Vlastnost podporují AutoSize pouze některé ovládací prvky. Kromě toho některé ovládací prvky, které podporují AutoSize vlastnost, také podporuje AutoSizeMode vlastnost.

Vždy pravdivé chování Popis
Automatická velikost je funkce za běhu. To znamená, že se nikdy nezvětší nebo zmenší ovládací prvek a pak nebude mít žádný další vliv.
Pokud ovládací prvek změní velikost, hodnota jeho Location vlastnosti vždy zůstane konstantní. Když obsah ovládacího prvku způsobí, že se zvětšuje, ovládací prvek se rozroste směrem doprava a dolů. Ovládací prvky se nezvětšují vlevo.
A Dock vlastnosti jsou dodrženy, pokud AutoSize je trueAnchor . Hodnota vlastnosti ovládacího prvku Location je upravena na správnou hodnotu.

Ovládací Label prvek je výjimkou tohoto pravidla. Když nastavíte hodnotu ukotvit Label vlastnosti ovládacího prvku AutoSize na true, Label ovládací prvek nebude roztažen.
Vlastnosti a MinimumSize vlastnosti ovládacího prvku MaximumSize jsou vždy dodrženy bez ohledu na hodnotu jeho AutoSize vlastnosti. Vlastnosti MaximumSize a vlastnosti nejsou touto vlastností ovlivněnyAutoSize.MinimumSize
Ve výchozím nastavení není nastavená minimální velikost. To znamená, že pokud je ovládací prvek nastaven na zmenšení AutoSize pod a nemá žádný obsah, hodnota jeho Size vlastnosti je (0x,0y). V tomto případě se ovládací prvek zmenší na bod a nebude snadno viditelný.
Pokud ovládací prvek neimplementuje metodu GetPreferredSize , GetPreferredSize vrátí metoda poslední hodnotu přiřazenou Size vlastnosti. To znamená, že nastavení AutoSize nebude true mít žádný vliv.
Ovládací prvek v TableLayoutPanel buňce se vždy zmenší tak, aby se vešel do buňky, dokud nedosáhnete MinimumSize . Tato velikost se vynucuje jako maximální velikost. To není případ, kdy je buňka součástí AutoSize řádku nebo sloupce.

Vlastnost AutoSizeMode

Vlastnost AutoSizeMode poskytuje jemněji odstupňovanou kontrolu nad výchozím AutoSize chováním. Vlastnost AutoSizeMode určuje, jak se ovládací prvek velikostí jeho obsahu. Obsah může být například text Button ovládacího prvku nebo podřízených ovládacích prvků kontejneru.

Následující seznam zobrazuje AutoSizeMode hodnoty a jeho chování.

  • AutoSizeMode.GrowAndShrink

    Ovládací prvek se zvětší nebo zmenší tak, aby zahrnoval jeho obsah.

    Hodnoty MinimumSize a MaximumSize hodnoty jsou dodrženy, ale aktuální hodnota Size vlastnosti je ignorována.

    Toto chování je stejné jako u ovládacích prvků s AutoSize vlastností a bez AutoSizeMode vlastnosti.

  • AutoSizeMode.GrowOnly

    Ovládací prvek roste tak, jak je potřeba, aby zahrnoval jeho obsah, ale nezmenší menší než hodnota určená jeho Size vlastností.

    Toto je výchozí hodnota pro AutoSizeMode.

Ovládací prvky, které podporují vlastnost AutoSize

Následující tabulka popisuje úroveň podpory automatické velikosti pomocí ovládacího prvku:

Ctrl AutoSize Podporovány AutoSizeMode Podporovány
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

Automatické nastavení v návrhovém prostředí

Následující tabulka popisuje chování nastavení velikosti ovládacího prvku v době návrhu na základě hodnoty jeho AutoSize a AutoSizeMode vlastností.

SelectionRules Přepište vlastnost, aby bylo možné určit, zda je daný ovládací prvek ve stavu umožňujícím změnu velikosti uživatele. V následující tabulce "nelze změnit velikost" znamená Moveable pouze, že "může změnit velikost" znamená AllSizeable a Moveable.

AutoSize Nastavení AutoSizeMode Nastavení Chování
true Vlastnost není k dispozici. Uživatel nemůže změnit velikost ovládacího prvku v době návrhu, s výjimkou následujících ovládacích prvků:

- TextBox
- MaskedTextBox
- RichTextBox
- TrackBar
true GrowAndShrink Uživatel nemůže změnit velikost ovládacího prvku v době návrhu.
true GrowOnly Uživatel může změnit velikost ovládacího prvku v době návrhu. Size Při nastavení vlastnosti může uživatel zvětšit pouze velikost ovládacího prvku.
false nebo AutoSize je skrytý Nevztahuje se. Uživatel může změnit velikost ovládacího prvku v době návrhu.

Poznámka:

Aby se maximalizovala produktivita, návrhář model Windows Forms v sadě Visual Studio stínuje AutoSize vlastnost třídyForm. V době návrhu se formulář chová, jako by AutoSize vlastnost je nastavena false, bez ohledu na jeho skutečné nastavení. Za běhu není provedeno žádné zvláštní ubytování a AutoSize vlastnost se použije podle nastavení vlastnosti.

Kontejner: Formulář

Jedná se Form o hlavní objekt model Windows Forms. Aplikace model Windows Forms obvykle bude mít formulář, který se bude zobrazovat vždy. Formuláře obsahují ovládací prvky a respektují Location vlastnosti Size ovládacího prvku pro ruční umístění. Formuláře také reagují na vlastnost Dock pro automatické umístění.

Ve většině případů bude formulář obsahovat úchyty na okrajích, které uživateli umožňují změnit velikost formuláře. Vlastnost Anchor ovládacího prvku umožní, aby se ovládací prvek zvětšoval a zmenšoval při změně velikosti formuláře.

Kontejner: Panel

Ovládací Panel prvek je podobný formuláři, ve které jednoduše seskupuje ovládací prvky. Podporuje stejné styly ručního a automatického umístění jako formulář. Další informace najdete v části Kontejner: Formulář .

Panel se bez problémů s nadřazeným objektem prolíná a ořízne libovolnou oblast ovládacího prvku, který spadne mimo hranice panelu. Pokud ovládací prvek spadá mimo hranice panelu a AutoScroll je nastaven na true, zobrazí se posuvníky a uživatel může panel posunout.

Na rozdíl od ovládacího prvku skupinového pole panel nemá popis a ohraničení.

A Windows Form with a panel and group box.

Výše uvedený obrázek obsahuje panel s BorderStyle vlastností nastavenou pro předvedení hranic panelu.

Kontejner: Pole Seskupovat

Ovládací GroupBox prvek poskytuje identifikovatelné seskupení pro jiné ovládací prvky. Pole skupiny se obvykle používá k rozdělení formuláře podle funkce. Můžete mít například formulář představující osobní údaje a pole související s adresou by seskupila dohromady. V době návrhu je snadné přesouvat pole skupiny spolu s jeho obsaženými ovládacími prvky.

Pole skupiny podporuje stejné styly ručního a automatického umístění, které formulář dělá. Další informace najdete v části Kontejner: Formulář . Skupinový rámeček také ořízne libovolnou část ovládacího prvku, který se vysadí z okrajů panelu.

Na rozdíl od ovládacího prvku panel nemá pole skupiny možnost posouvání obsahu a zobrazení posuvníků.

A Windows Form with a panel and group box.

Kontejner: Rozložení toku

Ovládací FlowLayoutPanel prvek uspořádá jeho obsah ve vodorovném nebo svislém směru toku. Obsah ovládacího prvku můžete zabalit z jednoho řádku na další nebo z jednoho sloupce na další. Případně můžete místo zabalení jeho obsahu vystřihot.

Směr toku můžete určit nastavením hodnoty FlowDirection vlastnosti. Ovládací FlowLayoutPanel prvek správně obrátí směr toku v rozloženích zprava doleva (RTL). Můžete také určit, zda FlowLayoutPanel je obsah ovládacího prvku zabalený nebo oříznutý nastavením hodnoty WrapContents vlastnosti.

Ovládací FlowLayoutPanel prvek se při nastavení AutoSize vlastnosti trueautomaticky nastaví na jeho obsah . Poskytuje také vlastnost podřízeným ovládacím prvkům FlowBreak . Nastavení hodnoty FlowBreak vlastnosti takFlowLayoutPanel, aby true ovládací prvek přestal rozkládat ovládací prvky v aktuálním směru toku a zalamovat na další řádek nebo sloupec.

A Windows Form with two flow panel controls.

Výše uvedený obrázek obsahuje dva FlowLayoutPanel ovládací prvky s BorderStyle vlastností nastavenou pro předvedení hranic ovládacího prvku.

Kontejner: Rozložení tabulky

Ovládací TableLayoutPanel prvek uspořádá jeho obsah do mřížky. Vzhledem k tomu, že rozložení se provádí v době návrhu i v době běhu, může se dynamicky měnit při změně prostředí aplikace. To dává ovládacím prvkům na panelu možnost proporcionálně změnit velikost, aby mohly reagovat na změny, jako je změna velikosti nadřazeného ovládacího prvku nebo změna délky textu kvůli lokalizaci.

Jakýkoli model Windows Forms ovládací prvek může být podřízeným ovládacím TableLayoutPanel prvku, včetně jiných instancí TableLayoutPanel. Díky tomu můžete vytvářet sofistikovaná rozložení, která se přizpůsobí změnám za běhu.

Směr rozšíření (vodorovně nebo svisle) můžete řídit také po TableLayoutPanel tom, co je ovládací prvek plný podřízených ovládacích prvků. Ve výchozím nastavení se TableLayoutPanel ovládací prvek rozbalí směrem dolů přidáním řádků.

Velikost a styl řádků a sloupců můžete řídit pomocí RowStyles a ColumnStyles vlastností. Vlastnosti řádků nebo sloupců můžete nastavit jednotlivě.

Ovládací TableLayoutPanel prvek přidá do podřízených ovládacích prvků následující vlastnosti: Cell, Column, Row, ColumnSpan, a RowSpan.

A Windows Form with table layout control.

Výše uvedený obrázek obsahuje tabulku s CellBorderStyle vlastností nastavenou tak, aby demonstrovala hranice každé buňky.

Kontejner: Rozdělení kontejneru

Ovládací prvek model Windows Forms SplitContainer si můžete představit jako složený ovládací prvek. Je to dva panely oddělené pohyblivým pruhem. Když je ukazatel myši nad pruhem, ukazatel změní obrazec tak, aby zobrazoval, že je pruh pohyblivý.

SplitContainer Pomocí ovládacího prvku můžete vytvářet složitá uživatelská rozhraní. Výběr na jednom panelu často určuje, jaké objekty se zobrazují na druhém panelu. Toto uspořádání je účinné pro zobrazování a procházení informací. Když máte dva panely, můžete agregovat informace v oblastech a pruh nebo "rozdělovač", což uživatelům usnadňuje změnu velikosti panelů.

A Windows Form with a nested split container.

Výše uvedený obrázek obsahuje rozdělený kontejner pro vytvoření levého a pravého podokna. Pravé podokno obsahuje druhý rozdělený kontejner s nastaveným parametrem OrientationVertical. Vlastnost je nastavena BorderStyle tak, aby demonstrovaly hranice každého panelu.

Kontejner: Ovládací prvek Tab

Zobrazí TabControl více karet, jako jsou rozdělovače v poznámkovém bloku nebo popisky v sadě složek v kartotéce. Karty můžou obsahovat obrázky a další ovládací prvky. Pomocí ovládacího prvku Tab můžete vytvořit typ vícestránka dialogového okna, které se zobrazí na mnoha místech v operačním systému Windows, například Ovládací panely a Vlastnosti zobrazení. Kromě toho TabControl lze použít k vytvoření stránek vlastností, které slouží k nastavení skupiny souvisejících vlastností.

Nejdůležitější vlastností TabControl je TabPages, která obsahuje jednotlivé karty. Každá jednotlivá TabPage karta je objekt.

A Windows Form with a tab control with two tab pages.