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 überLocation -
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