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.
Grundlagen
Das TableLayoutPanel übernimmt anschließend automatisch die komplette Positionierung seinerund Größenanpassung aller enthaltenen Controls.
Grundlagen
Ein TableLayoutPanel organisiert Controls in einem Tabellenlayout.
jedeZellePanelkann→genaufreieeinPositionierungoderübermehrereLocationControls enthalten-
FlowLayoutPanel→ automatische Anordnung hintereinander
TableLayoutPanel → Anordnung in Zeilen und Spalten
Dadurch eignet sich das Control besonders für responsive Layouts.
TableLayoutPanel erstellen
# Klassisch
$tableLayouttable = New-Object System.Windows.Forms.TableLayoutPanel
# .NET-Style
$tableLayouttable = [System.Windows.Forms.TableLayoutPanel]::new()
Controls hinzufügen
Controls werden wie bei jedem Container über Controls hinzugefügt.
$tableLayout.table.Controls.Add($button)
oder
Soll ein Controldirekt in eine bestimmte Zelle eingefügt werden:
$tableLayout.table.Controls.Add($button, 1, 0) Dabei gilt:
Spalte = 11, Zeile = 0
Zeilen
Zugriff auf Controls
festlegen
$tableLayout.Controls[0]table.ColumnCount = 2
$table.RowCount = 3
Eigenschaften
ColumnCount
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
PositionTyp eines= ControlsSystem.Boolean
Passt die Größe automatisch an den Inhalt an.
$tableLayout.GetRow($button)table.AutoSize = $tableLayout.GetColumn($button)true
CellBorderStyle
CellBorderStyle
PositionTyp ändern:= System.Windows.Forms.TableLayoutPanelCellBorderStyle
$tableLayout.SetRow($button, 2)
$tableLayout.SetColumn($button, 1)Eigenschaften
<details> <summary>Eigenschaften</summary>
</details>
ColumnCount [System.Int32]
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 vielevielen Spalten das RasterLayout besitzt.
Standardmäßig besitzt ein TableLayoutPanel eine Spalte.besteht.
$tableLayout.table.ColumnCount = 3
ColumnStyles
RowCount [System.Int32]
ColumnStyles
LegtTyp fest,= wieSystem.Windows.Forms.TableLayoutColumnStyleCollection
Bestimmt Zeilendie vorhandenBreite sind.jeder einzelnen Spalte.
Es gibt drei verschiedene Größenarten:
Absolute
Feste Pixelgröße
Percent
Prozentuale Verteilung
AutoSize
Größe richtet sich nach dem Inhalt
Beispiel
$tableLayout.RowCount = 4ColumnStyles [TableLayoutColumnStyleCollection]
Enthält die Größenregeln aller Spalten.
Jede Spalte besitzt einen ColumnStyle.
$tableLayout.table.ColumnStyles.Add(
[System.Windows.Forms.ColumnStyle]::new("Percent",50)
)
$table.ColumnStyles.Add(
[System.Windows.Forms.SizeType]ColumnStyle]::Percent,
50
)new("Percent",50)
)
Dock
Dock
TypischeTyp Größen:= System.Windows.Forms.DockStyle
Legt
AbsolutePercentAutoSizeRowStyles [TableLayoutRowStyleCollection]
Entspricht ColumnStyles, jedoch für Zeilen.
GrowStyle [TableLayoutPanelGrowStyle]
Bestimmt,fest, wie sichdas 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 RasterPanel verhält,reagiert, wenn mehr Controls hinzugefügt werden als Zellen vorhanden sind.
Mögliche Werte
-
AddRows -
AddColumns -
FixedSize
Standard:
AddRows$table.GrowStyle = "AddRows"
Bei
FixedSize RowCount
Typ
=CellBorderStyle [TableLayoutPanelCellBorderStyle]
System.Int32
Legt fest, obaus Zellrahmenwie dargestelltvielen werden.Zeilen das Layout besteht.
$table.RowCount = 4
RowStyles
RowStyles
Typ = System.Windows.Forms.TableLayoutRowStyleCollection
PraktischBestimmt zumdie DebuggenHöhe vonjeder Layouts.Zeile.
Auch
Methoden
hier <details> <summary>Methoden</summary>stehen
Controls.Add()AbsoluteGetColumn()PercentGetRow()GetControlFromPosition()
AutoSize
</details>
GetControlFromPosition()
Datentyp: Verfügung.[System.Windows.Forms.Control]
$tableLayout.GetControlFromPosition(table.RowStyles.Add(
Column,
Row[System.Windows.Forms.RowStyle]::new("AutoSize")
)
Methoden
GetControlFromPosition()
Liefert das Control einer bestimmten Zelle.
GetPositionFromControl()
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
GibtLiefert das Control zurück, das sich in der angegebenen ZelleSpalte und Zeile befindet.
GetPositionFromControl()
Rückgabe
Datentyp:Rückgabetyp [System.Windows.Forms.TableLayoutPanelCellPosition]Control
GetPositionFromControl()
GetPositionFromControl()
$tableLayout.table.GetPositionFromControl(
$button
)Liefert Zeile und Spalte eines Controls.
GetColumn()
$tableLayout.GetColumn($button)
Beschreibung
LiefertErmittelt die Spalteaktuelle Position eines Controls.Controls innerhalb des Rasters.
Rückgabe
GetRow(
Rückgabetyp System.Windows.Forms.TableLayoutPanelCellPosition
SetColumn()
SetColumn()
$tableLayout.GetRow(table.SetColumn($button)button,2)
Liefert die Zeile eines Controls.
SetColumn()
$tableLayout.SetColumn(
$button,
2
)Verschiebt dasein Control in eine andere Spalte.
SetRow()
SetRow()
$tableLayout.table.SetRow(
$button,
1
)1)Verschiebt dasein Control in eine andere Zeile.
SetColumnSpan()
SetColumnSpan()
$tableLayout.table.SetColumnSpan(
$button,
2
)2)Das Control erstreckt sich über mehrere Spalten.
SetRowSpan()
SetRowSpan()
$tableLayout.table.SetRowSpan(
$button,
2
)3)Das Control erstreckt sich über mehrere Zeilen.
Events
<details> <summary>Events</summary>
</details>
$tableLayout.Add_*
param($sender, $e)LayoutEvents
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 enthaltenen Controls neu anordnet.
Dies geschieht beispielsweise nach:bei
-
Größenänderungen
-
Änderungen an
ColumnStyles
Änderungen an RowStyles
ColumnStylesHinzufü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
})
WerdenWird ausgelöst, wennsobald Controlsein Control hinzugefügt oderwird.
ControlRemoved
ControlRemoved
$table.Add_ControlRemoved({
param($sender,$e)
Write-Host $e.Control.Name
})
Wird ausgelöst, sobald ein Control entfernt werden.wird.
Tipps & Tricks
Controls
Typischedirekt Stolperfallen
einer $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 ignoriert→häufig Dasfür TableLayoutPanel positioniert Controls selbst.
Gesamten werdenverfügbaren gestreckt
$table.Dock = "Fill"oderAnchorüberprüfen.
ColumnStylesRowStylesGrowStyleRowCountColumnCountMentales Modell
Das TableLayoutPanel istwächst eineund Tabelleschrumpft fürautomatisch Controls.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
Du platzierst ein Control nicht über Pixelkoordinaten, sondern sagst lediglich:
Dieses Control gehört inSpalte X, Zeile Y.
Den Rest übernimmt das Layout-System automatisch.