Skip to main content

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:

  • Absolute
  • Percent
  • AutoSize

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.

  • AddRows
  • AddColumns
  • FixedSize

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
    → Das TableLayoutPanel positioniert Controls selbst.
  • Controls erscheinen nicht an der erwarteten Stelle
    → Zeilen- oder Spaltenindex falsch.
  • Controls werden gestreckt
    → Dock oder Anchor überprüfen.
  • Prozentwerte ergeben kein erwartetes Layout
    → ColumnStyles bzw. RowStyles kontrollieren.
  • Zu wenige Zellen vorhanden
    → GrowStyle oder RowCount/ColumnCount anpassen.

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