Windows Forms: Grid-Container mit Hintergrundfarbe

Jeder der schon mit WPF (oder Silverlight) gearbeitet hat, empfindet es sicher wie ich als Qual wenn mit der älteren Technologie „Windows Forms“ arbeitet. In WPF gibt es eine Vielzahl von Containern, die einem eine Menge Arbeit abnehmen. Jeder der in WPF Stunden zubringt um einzelne Elemente neu zu verschieben, nur weil sich die Seitenbreite geändert hat, sollte sein Tun dringend überdenken.

Immer wenn ich also „Back to the roots“ gehe und ein Windows Forms-Projekt bearbeite, dann vermisse ich bespielsweise das Grid-Element, das sehr viele Elemente prozentual über den kompletten Bereich verteilen kann. Es gibt unter Windows Forms allerdings ein Element namens TableLayoutPanel, das ein bisschen Ähnlichkeit hat … allerdings mit der Eleganz einer Bahnschranke :-)

Hier ein paar Einschränkungen:
– Das Ausrichten übereinander ist nicht möglich.
– Es kann nur ein Element pro Zelle eingefügt werden
– Copy & Paste: Das neue Element wird in die letzten Zeile erstes Feld eingefügt
– Die Performance bei vielen UI-Elementen ist leider nicht besonders
– Bei einem Resize der Komponente könnte es flackern
– Zeilen und Spalten lassen sich nicht in der Design-Ansicht einfärben

Will man z.B. eine unterschiedliche Hintergrundfarbe für die erste und dritte Spalte haben, dann muss man das CellPaint-Ereignis abfangen und folgenden Handler programmieren:

void tableLayoutPanel1_CellPaint(object sender, 
        TableLayoutCellPaintEventArgs e)
{
    if (e.Row == 0 || e.Row == 2) {
        Graphics g = e.Graphics;
        Rectangle r = e.CellBounds;
        g.FillRectangle(Brushes.Blue, r);
    }
}

Besser als nichts. Ich setzte es gerne ein, wenn man schnell einen Prototypen basteln will.

Cheers,
Ralf

 

Comments are closed.