Skip to main content

TableLayoutPanel

1. Grid-Struktur
Ein TableLayoutPanel ist im Kern ein Container, der seine enthaltenen Controls in einem dynamischesRaster Rasteraus Zeilen und Spalten aus: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

    RowCount

    Zelle kann genau ein oder mehrere Controls enthalten
  • Zeilen

    ColumnCount

    und Spalten besitzen eigene Größenregeln
  • Controls

    RowStyles

    können mehrere Zeilen oder Spalten belegen
  • Änderungen

    ColumnStyles

    der Fenstergröße werden automatisch berücksichtigt

DieDadurch Styleseignet bestimmensich 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 Platzangegebenen verteiltZelle 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 nuran wieder vieleerwarteten 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 existieren.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