Położenie i układ kontrolek (Windows Forms .NET)
Umieszczanie kontrolek w formularzach systemu Windows jest określane nie tylko przez kontrolkę, ale także przez element nadrzędny kontrolki. W tym artykule opisano różne ustawienia udostępniane przez kontrolki i różne typy kontenerów nadrzędnych, które mają wpływ na układ.
Stałe położenie i rozmiar
Położenie kontrolki wyświetlanej na obiekcie nadrzędnym jest określane przez wartość właściwości Location względem lewej górnej części powierzchni nadrzędnej. Współrzędna lewej górnej pozycji w obiekcie nadrzędnym jest (x0,y0)
. Rozmiar kontrolki jest określany przez właściwość Size i reprezentuje szerokość i wysokość kontrolki.
kontenera
Po dodaniu kontrolki do elementu nadrzędnego, który wymusza automatyczne umieszczanie, położenie i rozmiar kontrolki zostają zmienione. W takim przypadku nie można ręcznie dostosować pozycji i rozmiaru kontrolki w zależności od typu elementu nadrzędnego.
Właściwości MaximumSize i MinimumSize pomagają ustawić minimalną i maksymalną ilość miejsca, z których może korzystać kontrolka.
Margines i odstęp
Istnieją dwie właściwości kontrolek, które ułatwiają precyzyjne umieszczanie kontrolek: Margin i Padding.
Właściwość Margin definiuje przestrzeń wokół kontrolki, która utrzymuje inne kontrolki w określonej odległości od jej krawędzi.
Właściwość Padding definiuje przestrzeń wewnątrz kontrolki, która utrzymuje zawartość kontrolki (na przykład wartość jej właściwości Text) w określonej odległości od jej krawędzi.
Na poniższej ilustracji przedstawiono właściwości Margin i Padding w elemencie sterującym.
Projektant programu Visual Studio będzie przestrzegać tych właściwości podczas pozycjonowania i zmiany rozmiaru kontrolek. Linie przyciągania są wyświetlane jako prowadnice ułatwiające pozostanie poza określonym marginesem kontrolki. Na przykład, gdy przeciągasz kontrolkę obok innej kontrolki, program Visual Studio wyświetla linię przyciągania.
Automatyczne umieszczanie i rozmiar
Elementy sterujące można automatycznie umieszczać w ich elemencie nadrzędnym. Niektóre kontenery nadrzędne narzucają sposób rozmieszczenia, podczas gdy inne respektują ustawienia dotyczące rozmieszczania. Istnieją dwie właściwości kontrolki, które ułatwiają automatyczne ustawianie i dopasowanie rozmiaru w obiekcie nadrzędnym: Dock i Anchor.
Kolejność rysunku może mieć wpływ na automatyczne umieszczanie. Kolejność, w jakiej kontrolka jest rysowana, zależy od jej indeksu w kolekcji Controls elementu nadrzędnego. Ten indeks jest znany jako Z-order. Każdy element sterujący jest rysowany w odwrotnej kolejności, jak pojawiają się w kolekcji. Oznacza to, że kolekcja działa na zasadzie "pierwsze weszło, ostatnie wyszło" oraz "ostatnie weszło, pierwsze wyszło".
Właściwości MinimumSize i MaximumSize pomagają ustawić minimalną i maksymalną ilość miejsca, z których może korzystać kontrolka.
Dok
Właściwość Dock
ustawia, które obramowanie kontrolki jest wyrównane do odpowiedniej strony elementu nadrzędnego, oraz jak jest zmieniany rozmiar kontrolki w obiekcie nadrzędnym.
Gdy kontrolka jest zadokowana, kontener określa przestrzeń, którą powinna zajmować, oraz dostosowuje rozmiar i umieszcza kontrolkę. Szerokość i wysokość kontrolki są nadal zachowane na podstawie stylu dokowania. Na przykład, jeśli kontrolka jest zakotwiczona u góry, Height kontrolki jest zachowana, natomiast Width jest automatycznie dostosowywana. Jeśli kontrolka jest zadokowana po lewej stronie, Width kontrolki jest przestrzegana, ale Height jest automatycznie dostosowywana.
Nie można ręcznie ustawić Location kontrolki jako zadokowanie kontrolki automatycznie kontroluje jej położenie.
Z-order kontrolki ma wpływ na dokowanie. Podczas układania zadokowanych kontrolek wykorzystują dostępne dla nich miejsce. Jeśli na przykład kontrolka zostanie narysowana jako pierwsza i zamocowana u góry, zajmie całą szerokość kontenera. Jeśli następna kontrolka jest zadokowana po lewej stronie, ma mniej dostępnego miejsca w pionie.
Jeśli pozycja zadokowania kontrolki Z-order jest zmieniona, kontrolka zadokowana po lewej stronie ma teraz więcej przestrzeni początkowej dostępnej. Kontrolka używa całej wysokości kontenera. Kontrolka przymocowana na górze ma mniej dostępnej przestrzeni w poziomie.
Gdy kontener rośnie i maleje, kontrolki zadokowane do kontenera są przemieszczane i zmieniane rozmiar, aby zachować ich odpowiednie pozycje i rozmiary.
Jeśli wiele kontrolek jest zadokowanych po tej samej stronie kontenera, są one ułożone według ich Z-order.
Kotwica
Zakotwiczenie kontrolki umożliwia powiązanie kontrolki z co najmniej jedną stroną kontenera nadrzędnego. W miarę zmiany rozmiaru kontenera każda kontrolka podrzędna zachowa odległość do zakotwiczonej strony.
Kontrolę można zakotwiczyć na jedną lub więcej stron bez ograniczeń. Kotwica jest ustawiana za pomocą właściwości Anchor.
Automatyczne ustalanie rozmiaru
Właściwość AutoSize umożliwia kontrolce zmianę rozmiaru w razie potrzeby w celu dopasowania rozmiaru określonego przez właściwość PreferredSize. Można dostosować zachowanie rozmiaru dla określonych kontrolek, ustawiając właściwość AutoSizeMode
.
Tylko niektóre kontrolki obsługują właściwość AutoSize. Ponadto niektóre kontrolki obsługujące właściwość AutoSize obsługują również właściwość AutoSizeMode
.
Zawsze autentyczne zachowanie | Opis |
---|---|
Automatyczne ustalanie rozmiaru jest funkcją w trakcie działania. | Oznacza to, że nigdy nie powiększa ani nie zmniejsza elementu sterującego i nie ma dalszego efektu. |
Jeśli kontrolka zmieni rozmiar, wartość jej właściwości Location zawsze pozostaje stała. | Kiedy zawartość elementu sterującego powoduje jego rozrost, element sterujący rozrasta się na prawo i w dół. Kontrolki nie rozszerzają się w lewo. |
Właściwości Dock i Anchor są respektowane, gdy AutoSize jest true . |
Wartość właściwości Location kontrolki jest dostosowywana do poprawnej wartości. Kontrolka Label jest wyjątkiem od tej reguły. Gdy ustawisz wartość właściwości AutoSize kontrolki Label zadokowanej na true , kontrolka Label nie będzie się rozciągać. |
Właściwości MaximumSize i MinimumSize kontrolki są zawsze respektowane, niezależnie od wartości jej właściwości AutoSize. | Na właściwości MaximumSize i MinimumSize nie wpływa właściwość AutoSize. |
Domyślnie nie ma ustawionego minimalnego rozmiaru. | Oznacza to, że jeśli kontrolka jest ustawiona tak, aby zmniejszała się przy AutoSize i nie ma zawartości, wartość jej właściwości Size wynosi (0x,0y) . W takim przypadku kontrolka zmniejszy się do punktu i nie będzie łatwo widoczna. |
Jeśli kontrolka nie implementuje metody GetPreferredSize, metoda GetPreferredSize zwraca ostatnią wartość przypisaną do właściwości Size. | Oznacza to, że ustawienie AutoSize na true nie będzie miało wpływu. |
Kontrolka w komórce TableLayoutPanel zawsze zmniejsza się, aby zmieścić się w komórce do momentu osiągnięcia jej MinimumSize. | Ten rozmiar jest wymuszany jako maksymalny rozmiar. Nie jest tak, gdy komórka jest częścią wiersza lub kolumny AutoSize. |
Właściwość AutoSizeMode
Właściwość AutoSizeMode zapewnia bardziej szczegółową kontrolę nad domyślnym zachowaniem AutoSize. Właściwość AutoSizeMode
określa, w jaki sposób kontrola zmienia rozmiar na podstawie jej zawartości. Na przykład zawartość może być tekstem dla elementu sterującego Button lub elementów sterujących podrzędnych dla kontenera.
Na poniższej liście przedstawiono wartości AutoSizeMode
i jego zachowanie.
-
Kontrolka rośnie lub zmniejsza się, aby obejmowała jego zawartość.
Wartości MinimumSize i MaximumSize są honorowane, ale bieżąca wartość właściwości Size jest ignorowana.
Jest to takie samo zachowanie jak kontrolki z właściwością AutoSize i bez właściwości
AutoSizeMode
. -
Kontrolka zwiększa się na tyle, na ile to konieczne, aby obejmowała swoją zawartość, ale nie zmniejszy się do wartości określonej przez jej właściwość Size.
Jest to domyślna wartość dla
AutoSizeMode
.
Kontrolki obsługujące właściwość AutoSize
W poniższej tabeli opisano poziom obsługi automatycznego określania rozmiaru przez kontrolkę.
Kontrola |
AutoSize obsługiwane |
AutoSizeMode obsługiwane |
---|---|---|
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 w środowisku projektowym
W poniższej tabeli opisano zachowanie rozmiaru kontrolki w czasie projektowania na podstawie wartości jej AutoSize i AutoSizeMode
właściwości.
Zastąpij właściwość SelectionRules, aby określić, czy dana kontrolka jest w stanie umożliwiającym zmianę rozmiaru użytkownika. W poniższej tabeli "nie można zmienić rozmiaru" oznacza Moveable tylko, "można zmienić rozmiar" oznacza AllSizeable i Moveable.
ustawienie AutoSize |
ustawienie AutoSizeMode |
Zachowanie |
---|---|---|
true |
Właściwość jest niedostępna. | Użytkownik nie może zmienić rozmiaru kontrolki w czasie projektowania, z wyjątkiem następujących kontrolek: - TextBox - MaskedTextBox - RichTextBox - TrackBar |
true |
GrowAndShrink | Użytkownik nie może zmienić rozmiaru kontrolki w czasie projektowania. |
true |
GrowOnly | Użytkownik może zmienić rozmiar kontrolki w czasie projektowania. Po ustawieniu właściwości Size użytkownik może tylko zwiększyć rozmiar kontrolki. |
false lub AutoSize jest ukryty |
Nie dotyczy. | Użytkownik może zmienić rozmiar kontrolki w czasie projektowania. |
Notatka
Aby zmaksymalizować produktywność, projektant formularzy Windows w programie Visual Studio przesłania właściwość AutoSize dla klasy Form. W czasie projektowania formularz zachowuje się tak, jakby właściwość AutoSize jest ustawiona na false
, niezależnie od rzeczywistego ustawienia. W czasie wykonywania nie jest stosowane żadne specjalne traktowanie, a właściwość AutoSize jest zastosowana tak, jak określono w ustawieniu właściwości.
Kontener: formularz
Form jest głównym obiektem formularzy systemu Windows. Aplikacja Windows Forms będzie zwykle mieć wyświetlany formularz przez cały czas. Formularze zawierają kontrolki i uwzględniają właściwości Location i Size kontrolki do ręcznego umieszczania. Formularze reagują również na właściwość dock w celu automatycznego umieszczania.
W większości przypadków formularz będzie miał uchwyty na krawędziach, które umożliwiają użytkownikowi zmianę rozmiaru formularza. Właściwość Anchor kontrolki pozwoli jej powiększać się i zmniejszać w miarę zmieniania rozmiaru formularza.
Kontener: Panel
Kontrolka Panel jest podobna do formularza, w ramach którego po prostu grupuje kontrolki razem. Obsługuje te same style ręcznego i automatycznego umieszczania, które wykonuje formularz. Aby uzyskać więcej informacji, zobacz sekcję kontenera : formularz.
Panel wtapia się bezproblemowo w element nadrzędny i odcina dowolny obszar kontrolki, który przekracza jego granice. Jeśli kontrolka wykracza poza granice panelu i AutoScroll jest ustawiona na true
, paski przewijania są wyświetlane, a użytkownik może przewijać panel.
W przeciwieństwie do kontrolki pola grupy , panel nie ma tytułu ani obramowania.
Powyższy obraz zawiera panel z właściwością BorderStyle ustawioną w celu zademonstrowania granic panelu.
Kontener: ramka grupy
Kontrolka GroupBox umożliwia identyfikację grupowania dla innych kontrolek. Zazwyczaj używasz pola grupy do podzielenia formularza według funkcji. Na przykład może istnieć formularz reprezentujący dane osobowe, a pola powiązane z adresem zostaną zgrupowane razem. W czasie projektowania można łatwo przenieść pole grupowe wraz z zawartymi w nim kontrolkami.
Pole grupy obsługuje te same style ręcznego i automatycznego umieszczania, jakie ma formularz. Aby uzyskać więcej informacji, zobacz sekcję kontenera : formularz. Grupowe pole także odcina dowolną część kontrolki, która wykracza poza granice panelu.
W przeciwieństwie do panelu sterowania panelu, pole grupowe nie ma możliwości przewijania zawartości i wyświetlania pasków przewijania.
Kontener: układ przepływu
Kontrolka FlowLayoutPanel rozmieszcza jego zawartość w kierunku przepływu poziomego lub pionowego. Zawartość kontrolki można opakowować z jednego wiersza do następnego lub z jednej kolumny do następnej. Alternatywnie można przyciąć zawartość, zamiast ją owijać.
Kierunek przepływu można określić, ustawiając wartość właściwości FlowDirection. Kontrolka FlowLayoutPanel poprawnie odwraca kierunek przepływu w układach od prawej do lewej (RTL). Możesz również określić, czy zawartość elementu sterującego FlowLayoutPanel jest zawijana, czy obcinana, ustawiając wartość właściwości WrapContents.
Kontrolka FlowLayoutPanel automatycznie ustawia rozmiar na swoją zawartość, gdy ustawisz właściwość AutoSize na wartość true
. Zapewnia również właściwość FlowBreak
dla kontrolek podrzędnych. Ustawienie wartości właściwości FlowBreak
na true
powoduje, że kontrolka FlowLayoutPanel zatrzymuje układanie kontrolek w bieżącym kierunku przepływu i przechodzi do następnego wiersza lub kolumny.
Powyższy obraz zawiera dwie kontrolki FlowLayoutPanel
z właściwością BorderStyle ustawioną w celu zademonstrowania granic kontrolki.
Kontener: układ tabeli
Kontrolka TableLayoutPanel rozmieszcza jego zawartość w siatce. Ponieważ układ jest wykonywany zarówno w czasie projektowania, jak i w czasie wykonywania, może on zmieniać się dynamicznie w miarę zmian środowiska aplikacji. Dzięki temu kontrolki w panelu mogą zmieniać proporcjonalnie rozmiar, dzięki czemu mogą reagować na zmiany, takie jak zmiana rozmiaru kontrolki nadrzędnej lub zmiana długości tekstu z powodu lokalizacji.
Każda kontrolka Windows Forms może być elementem podrzędnym kontrolki TableLayoutPanel, w tym inne wystąpienia TableLayoutPanel. Dzięki temu można tworzyć zaawansowane układy, które dostosowują się do zmian w czasie wykonywania.
Można również kontrolować kierunek rozszerzania (poziomo lub pionowo), po zapełnieniu kontrolki TableLayoutPanel kontrolkami podrzędnymi. Domyślnie kontrolka TableLayoutPanel rozwija się w dół, dodając wiersze.
Rozmiar i styl wierszy i kolumn można kontrolować przy użyciu właściwości RowStyles i ColumnStyles. Właściwości wierszy lub kolumn można ustawić indywidualnie.
Kontrolka TableLayoutPanel dodaje następujące właściwości do kontrolek podrzędnych: Cell
, Column
, Row
, ColumnSpan
i RowSpan
.
Powyższy obraz zawiera tabelę z właściwością CellBorderStyle ustawioną w celu zademonstrowania granic każdej komórki.
Kontener: Podział kontenera
Kontrolka windows Forms SplitContainer może być uważana za kontrolkę złożoną; jest to dwa panele oddzielone słupkiem ruchomym. Gdy wskaźnik myszy znajduje się na pasku, wskaźnik zmienia kształt, aby pokazać, że pasek jest wymienny.
Za pomocą kontrolki SplitContainer można tworzyć złożone interfejsy użytkownika; często wybór w jednym panelu określa, jakie obiekty są wyświetlane na drugim panelu. Ten układ jest skuteczny w przypadku wyświetlania i przeglądania informacji. Posiadanie dwóch paneli umożliwia agregowanie informacji w obszarach, a pasek lub "rozdzielacz", ułatwia użytkownikom zmianę rozmiaru paneli.
Powyższy obraz zawiera podzielony kontener, aby utworzyć okienko po lewej i prawej stronie. Prawy panel zawiera drugi podzielony kontener z ustawieniem Orientation na Vertical. Właściwość BorderStyle jest ustawiona tak, aby zademonstrować granice każdego panelu.
Kontener: kontrolka tabulatora
TabControl wyświetla wiele kart, takich jak podziały w notesie lub etykiety w zestawie folderów w szafce kartotekowej. Karty mogą zawierać obrazy i inne elementy sterujące. Użyj kontrolki tabulacji, aby utworzyć wielostronicowe okno dialogowe, które pojawia się w różnych miejscach w systemie operacyjnym Windows, takich jak Panel sterowania i Właściwości wyświetlania. Ponadto można użyć TabControl do tworzenia stron właściwości, które są używane do ustawiania grupy powiązanych właściwości.
Najważniejszą właściwością TabControl jest TabPages, która zawiera poszczególne karty. Każda karta jest obiektem TabPage.
.NET Desktop feedback