Motivation

Leider stellt das .Net-Framework kein Label-Steuerelement mit vertikaler Textausrichtung zur Verfügung. Möchte man ein Fenster mit einer Matrix als Inhalt erstellen, wäre eine vertikale Beschriftung der Spalten sehr nützlich. UrsVerticalLabel hilft:

UrsVerticalLabel zur Zeilenbeschriftung

Download

Verwendung

Das UrsVerticalLabel-Steuerelement kann nahezu identisch zu einem Label-Steuerelement verwandt werden. Durch die Art der Implementierung –die Rendering erfolgt über ein normales Label-Element, dessen Grafik um 90° gedreht wird– wird schnell klar, was funktionieren kann und was nicht. Das Testprogramm (s.u.) zeigt, was möglich ist.

Die Eigenschaft DrawMode gibt es beim Label-Steuerelement nicht. Mit dieser Eigenschaft wird die Drehrichtung festgelegt.

Die Eigenschaften ImageList, ImageIndex, ImageKey,  wurden nicht implementiert, da hier kein direkter Zugriff auf die grafische Aufbereitung möglich ist. Bilder aus der ImageList würden gedreht dargestellt werden. Diese Einschränkung kann aber von außen einfach umgangen werden, indem die Image-Eigenschaft entsprechend bedient wird. Die Eigenschaft RightToLeft wurde ebenfalls nicht implementiert. Zum einem habe ich sie noch nie benötigt zum anderen kenne ich die Beziehungen zu den Einstellungen anderer Eigenschaften nicht genau.

Test-Programm

Das Testprogramm zeigt diverse Einstellungen des UrsVerticalLabel-Steuerelements.

Testprogramm MsgBoxExTest

Implementierung

Wie bereits oben erwähnt, wird das Rendering von einem "normalen" Label-Steuerelement übernommen. Das man das Steuerelement nicht selbst rotieren kann, wird die Ausgabe in eine Bitmap umgeleitet (Control.DrawToBitmap(…)). Diese Bitmap wird dann gedreht (Image.RotateFlip(…)) und per Graphics.DrawImage((…) ausgegeben.

Wegen der Rotation müssen einige richtungsbezogene Eigenschaften "zurück" rotiert werden. Dies sind die Eigenschaften vom Typ ContentAlignment, Padding und Image.