TableLayoutPanel
Ein TableLayoutPanel ist ein Container, der seine enthaltenen Controls in einem Raster aus Zeilen und Spalten anordnet.
Im Gegensatz zu einem normalen Panel werden Controls nicht über ihre Location positioniert, sondern einer bestimmten Zelle des Rasters zugewiesen.
Grundlagen
Das TableLayoutPanel übernimmt die komplette Positionierung seiner enthaltenen Controls.
- jede Zelle kann genau ein oder mehrere Controls enthalten
- Zeilen und Spalten besitzen eigene Größenregeln
- Controls können mehrere Zeilen oder Spalten belegen
- Änderungen der Fenstergröße werden automatisch berücksichtigt
Dadurch eignet sich das Control besonders für responsive Layouts.
TableLayoutPanel erstellen
# Klassisch
$tableLayout = New-Object System.Windows.Forms.TableLayoutPanel
# .NET-Style
$tableLayout = [System.Windows.Forms.TableLayoutPanel]::new()
Controls hinzufügen
Controls werden wie bei jedem Container über Controls hinzugefügt.
$tableLayout.Controls.Add($button)
Soll ein Control in eine bestimmte Zelle eingefügt werden:
$tableLayout.Controls.Add($button, 1, 0)
Dabei gilt:
Spalte = 1
Zeile = 0
Zugriff auf Controls
$tableLayout.Controls[0]
Position eines Controls ermitteln:
$tableLayout.GetRow($button)
$tableLayout.GetColumn($button)
Position ändern:
$tableLayout.SetRow($button, 2)
$tableLayout.SetColumn($button, 1)
Eigenschaften
<details> <summary>Eigenschaften</summary>
- Anchor
- AutoScroll
- CellBorderStyle
- ColumnCount
- ColumnStyles
- Dock
- GrowStyle
- Padding
- RowCount
- RowStyles
</details>
ColumnCount [System.Int32]
Legt fest, wie viele Spalten das Raster besitzt.
Standardmäßig besitzt ein TableLayoutPanel eine Spalte.
$tableLayout.ColumnCount = 3
RowCount [System.Int32]
Legt fest, wie viele Zeilen vorhanden sind.
$tableLayout.RowCount = 4
ColumnStyles [TableLayoutColumnStyleCollection]
Enthält die Größenregeln aller Spalten.
Jede Spalte besitzt einen ColumnStyle.
$tableLayout.ColumnStyles.Add(
[System.Windows.Forms.ColumnStyle]::new(
[System.Windows.Forms.SizeType]::Percent,
50
)
)
Typische Größen:
AbsolutePercentAutoSize
RowStyles [TableLayoutRowStyleCollection]
Entspricht ColumnStyles, jedoch für Zeilen.
GrowStyle [TableLayoutPanelGrowStyle]
Bestimmt, wie sich das Raster verhält, wenn mehr Controls hinzugefügt werden als Zellen vorhanden sind.
AddRowsAddColumnsFixedSize
Standard:
AddRows
CellBorderStyle [TableLayoutPanelCellBorderStyle]
Legt fest, ob Zellrahmen dargestellt werden.
Praktisch zum Debuggen von Layouts.
Methoden
<details> <summary>Methoden</summary>
- Controls.Add()
- GetColumn()
- GetRow()
- GetControlFromPosition()
- GetPositionFromControl()
- SetColumn()
- SetRow()
- SetColumnSpan()
- SetRowSpan()
</details>
GetControlFromPosition()
Datentyp: [System.Windows.Forms.Control]
$tableLayout.GetControlFromPosition(
Column,
Row
)
Gibt das Control zurück, das sich in der angegebenen Zelle befindet.
GetPositionFromControl()
Datentyp: [System.Windows.Forms.TableLayoutPanelCellPosition]
$tableLayout.GetPositionFromControl(
$button
)
Liefert Zeile und Spalte eines Controls.
GetColumn()
$tableLayout.GetColumn($button)
Liefert die Spalte eines Controls.
GetRow()
$tableLayout.GetRow($button)
Liefert die Zeile eines Controls.
SetColumn()
$tableLayout.SetColumn(
$button,
2
)
Verschiebt das Control in eine andere Spalte.
SetRow()
$tableLayout.SetRow(
$button,
1
)
Verschiebt das Control in eine andere Zeile.
SetColumnSpan()
$tableLayout.SetColumnSpan(
$button,
2
)
Das Control erstreckt sich über mehrere Spalten.
SetRowSpan()
$tableLayout.SetRowSpan(
$button,
2
)
Das Control erstreckt sich über mehrere Zeilen.
Events
<details> <summary>Events</summary>
- ControlAdded
- ControlRemoved
- Layout
- Paint
- Resize
</details>
$tableLayout.Add_*
param($sender, $e)
Layout
Wird ausgelöst, wenn das TableLayoutPanel seine enthaltenen Controls neu anordnet.
Dies geschieht beispielsweise nach:
- Größenänderungen
- Änderungen an
RowStyles - Änderungen an
ColumnStyles - Hinzufügen oder Entfernen von Controls
ControlAdded / ControlRemoved
Werden ausgelöst, wenn Controls hinzugefügt oder entfernt werden.
Tipps & Tricks
Typische Stolperfallen
- Location wird ignoriert
→ DasTableLayoutPanelpositioniert Controls selbst. - Controls erscheinen nicht an der erwarteten Stelle
→ Zeilen- oder Spaltenindex falsch. - Controls werden gestreckt
→DockoderAnchorüberprüfen. - Prozentwerte ergeben kein erwartetes Layout
→ColumnStylesbzw.RowStyleskontrollieren. - Zu wenige Zellen vorhanden
→GrowStyleoderRowCount/ColumnCountanpassen.
Mentales Modell
Das TableLayoutPanel ist eine Tabelle für Controls.
Du platzierst ein Control nicht über Pixelkoordinaten, sondern sagst lediglich:
Dieses Control gehört in Spalte X, Zeile Y.
Den Rest übernimmt das Layout-System automatisch.
Wann sinnvoll?
- Dialogfenster
- Einstellungsseiten
- Formulare
- Responsive Layouts
- Gleichmäßige Anordnung von Controls
Wann vermeiden?
- Freie Pixelpositionierung erforderlich
- Animationen
- Überlappende Controls
- Individuelle Layoutlogik