Skip to main content

TableLayoutPanel

Ein TableLayoutPanel ist ein Layout-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 innerhalb des Rasters zugewiesen. Das TableLayoutPanel übernimmt anschließend automatisch die Positionierung und Größenanpassung aller enthaltenen Controls.


Grundlagen

Ein TableLayoutPanel organisiert Controls in einem Tabellenlayout.

  • Panel → freie Positionierung über Location

  • FlowLayoutPanel → automatische Anordnung hintereinander

  • TableLayoutPanel → Anordnung in Zeilen und Spalten

TableLayoutPanel erstellen

# Klassisch
$table = New-Object System.Windows.Forms.TableLayoutPanel

# .NET-Style
$table = [System.Windows.Forms.TableLayoutPanel]::new()

Controls hinzufügen

$table.Controls.Add($button)

oder direkt in eine bestimmte Zelle

$table.Controls.Add($button, 1, 0) # Spalte 1, Zeile 0

Zeilen und Spalten festlegen

$table.ColumnCount = 2
$table.RowCount    = 3

Eigenschaften

Eigenschaft Beschreibung
ColumnCount Anzahl der Spalten.
RowCount Anzahl der Zeilen.
ColumnStyles Definiert Breite jeder Spalte.
RowStyles Definiert Höhe jeder Zeile.
GrowStyle Legt fest, wie neue Zeilen oder Spalten entstehen.
CellBorderStyle Zeichnet Rahmen zwischen den Zellen.
Dock Dockt das Panel an den Parent an.
Anchor Verankert das Panel am Parent.
AutoSize Passt die Größe automatisch an.
AutoScroll Aktiviert Scrollleisten.
BackColor Hintergrundfarbe.
Padding Innenabstand.
Margin Außenabstand.
Name Interner Name.
Location Position des Panels.
Size Größe des Panels.
Visible Sichtbarkeit.
Enabled Aktiviert bzw. deaktiviert das Panel.
AutoSize

AutoSize

Typ = System.Boolean

Passt die Größe automatisch an den Inhalt an.

$table.AutoSize = $true
CellBorderStyle

CellBorderStyle

Typ = System.Windows.Forms.TableLayoutPanelCellBorderStyle

Legt fest, ob zwischen den Zellen Rahmen gezeichnet werden.

Mögliche Werte

  • None

  • Single

  • Inset

  • Outset

  • InsetDouble

  • OutsetDouble

$table.CellBorderStyle = "Single"
ColumnCount

ColumnCount

Typ = System.Int32

Legt fest, aus wie vielen Spalten das Layout besteht.

$table.ColumnCount = 3
ColumnStyles

ColumnStyles

Typ = System.Windows.Forms.TableLayoutColumnStyleCollection

Bestimmt die Breite jeder einzelnen Spalte.

Es gibt drei verschiedene Größenarten:

Größe Beschreibung
Absolute Feste Pixelgröße
Percent Prozentuale Verteilung
AutoSize Größe richtet sich nach dem Inhalt
Beispiel
$table.ColumnStyles.Add(
    [System.Windows.Forms.ColumnStyle]::new("Percent",50)
)

$table.ColumnStyles.Add(
    [System.Windows.Forms.ColumnStyle]::new("Percent",50)
)
Dock

Dock

Typ = System.Windows.Forms.DockStyle

Legt fest, wie das TableLayoutPanel innerhalb seines Parent-Containers angedockt wird.

$table.Dock = "Fill"

Dies ist die häufigste Einstellung.

GrowStyle

GrowStyle

Typ = System.Windows.Forms.TableLayoutPanelGrowStyle

Legt fest, wie das Panel reagiert, wenn mehr Controls hinzugefügt werden als Zellen vorhanden sind.

Mögliche Werte

  • AddRows

  • AddColumns

  • FixedSize

$table.GrowStyle = "AddRows"

Bei FixedSize wird eine Ausnahme ausgelöst, wenn kein Platz mehr vorhanden ist.

RowCount

RowCount

Typ = System.Int32

Legt fest, aus wie vielen Zeilen das Layout besteht.

$table.RowCount = 4
RowStyles

RowStyles

Typ = System.Windows.Forms.TableLayoutRowStyleCollection

Bestimmt die Höhe jeder Zeile.

Auch hier stehen

  • Absolute

  • Percent

  • AutoSize

zur Verfügung.

$table.RowStyles.Add(
    [System.Windows.Forms.RowStyle]::new("AutoSize")
)

Methoden

Methode Beschreibung
GetControlFromPosition() Liefert das Control einer bestimmten Zelle.
GetPositionFromControl() Liefert die Position eines Controls.
GetColumn() Liefert die Spalte eines Controls.
GetRow() Liefert die Zeile eines Controls.
SetColumn() Verschiebt ein Control in eine andere Spalte.
SetRow() Verschiebt ein Control in eine andere Zeile.
SetColumnSpan() Lässt ein Control mehrere Spalten belegen.
SetRowSpan() Lässt ein Control mehrere Zeilen belegen.
GetControlFromPosition()

GetControlFromPosition()

$table.GetControlFromPosition(1,0)
Beschreibung

Liefert das Control zurück, das sich in der angegebenen Spalte und Zeile befindet.

Rückgabe

Rückgabetyp System.Windows.Forms.Control

GetPositionFromControl()

GetPositionFromControl()

$table.GetPositionFromControl($button)
Beschreibung

Ermittelt die aktuelle Position eines Controls innerhalb des Rasters.

Rückgabe

Rückgabetyp System.Windows.Forms.TableLayoutPanelCellPosition

SetColumn()

SetColumn()

$table.SetColumn($button,2)

Verschiebt ein Control in eine andere Spalte.

SetRow()

SetRow()

$table.SetRow($button,1)

Verschiebt ein Control in eine andere Zeile.

SetColumnSpan()

SetColumnSpan()

$table.SetColumnSpan($button,2)

Das Control erstreckt sich über mehrere Spalten.

SetRowSpan()

SetRowSpan()

$table.SetRowSpan($button,3)

Das Control erstreckt sich über mehrere Zeilen.


Events

Event Beschreibung
Layout Wird ausgelöst, wenn das Layout neu berechnet wird.
ControlAdded Ein Control wurde hinzugefügt.
ControlRemoved Ein Control wurde entfernt.

Layout

Layout

Das Event wird ausgelöst, wenn das TableLayoutPanel seine Controls neu anordnet.

Dies geschieht beispielsweise bei

  • Größenänderungen

  • Änderungen an ColumnStyles

  • Änderungen an RowStyles

  • Hinzufügen oder Entfernen von Controls

$table.Add_Layout({
    Write-Host "Layout aktualisiert"
})
ControlAdded

ControlAdded

$table.Add_ControlAdded({
    param($sender,$e)

    Write-Host $e.Control.Name
})

Wird ausgelöst, sobald ein Control hinzugefügt wird.

ControlRemoved

ControlRemoved

$table.Add_ControlRemoved({
    param($sender,$e)

    Write-Host $e.Control.Name
})

Wird ausgelöst, sobald ein Control entfernt wird.


Tipps & Tricks

Controls direkt einer Zelle hinzufügen

$table.Controls.Add($button,0,1)

Dadurch entfällt ein späterer Aufruf von SetColumn() und SetRow().

Control über mehrere Spalten strecken

$table.SetColumnSpan($textBox,2)

Dies wird häufig für Überschriften oder TextBoxen verwendet.

Gesamten verfügbaren Platz ausfüllen

$table.Dock = "Fill"

Das TableLayoutPanel wächst und schrumpft automatisch mit seinem Parent-Container.

Gleichmäßige Spalten erzeugen

$table.ColumnCount = 2

$table.ColumnStyles.Add(
    [System.Windows.Forms.ColumnStyle]::new("Percent",50)
)

$table.ColumnStyles.Add(
    [System.Windows.Forms.ColumnStyle]::new("Percent",50)
)

Beide Spalten belegen dadurch jeweils die Hälfte der verfügbaren Breite