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.


Grundlagen

Das TableLayoutPanel übernimmt anschließend automatisch die komplette Positionierung seinerund Größenanpassung aller enthaltenen Controls.


Grundlagen

Ein TableLayoutPanel organisiert Controls in einem Tabellenlayout.

  • jede Zelle

    Panel kann→ genaufreie einPositionierung oderüber mehrereLocation

    Controls enthalten
  • FlowLayoutPanel → automatische Anordnung hintereinander

TableLayoutPanel → Anordnung in 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
$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

und
Spalten


Zugriff auf Controls

festlegen
$tableLayout.Controls[0]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

PositionTyp eines= ControlsSystem.Boolean

ermitteln:

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>

    Anchor AutoScroll CellBorderStyle ColumnCount ColumnStyles Dock GrowStyle Padding RowCount RowStyles

    </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

      viele

      Bestimmt Zeilendie vorhandenBreite sind.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
      $tableLayout.RowCount = 4


      ColumnStyles [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

        Absolute Percent AutoSize

        RowStyles [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
        wird
        eine
        Ausnahme
        ausgelöst,
        wenn
        kein
        Platz
        mehr
        vorhanden
        ist.
        RowCount

        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()

          Absolute

        • GetColumn()

          Percent

        • GetRow()
        • GetControlFromPosition()

        AutoSize

        GetPositionFromControl() SetColumn() SetRow() SetColumnSpan() SetRowSpan()

        </details>

        zur

        GetControlFromPosition()

        Datentyp: [System.Windows.Forms.Control]Verfügung.

        $tableLayout.GetControlFromPosition(table.RowStyles.Add(
            Column,
            Row[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

        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>

          ControlAdded ControlRemoved Layout Paint Resize

          </details>

          $tableLayout.Add_*
              param($sender, $e)


          LayoutEvents

          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 enthaltenen Controls neu anordnet.

          Dies geschieht beispielsweise nach:bei

          • Größenänderungen

          • Änderungen an ColumnStyles

          Änderungen an RowStyles

          Änderungen an ColumnStyles

          Hinzufügen oder Entfernen von Controls


          $table.Add_Layout({
              

          Write-Host "Layout aktualisiert" })

          ControlAdded /

          ControlAdded

          ControlRemoved
          $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
            Zelle Locationhinzufü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 ignoriert
            →häufig Dasfür TableLayoutPanel positioniert Controls selbst.

            Controls erscheinen nicht an der erwarteten Stelle
            → Zeilen-Überschriften oder SpaltenindexTextBoxen falsch.verwendet. Controls

            Gesamten werdenverfügbaren gestreckt


            →Platz ausfüllen
            $table.Dock = "Fill"
             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 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 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