Länge eines Labeltextes in Pixel ermitteln

27/12/2009 - 20:51 von Robert Spence | Report spam
Hallo NG,

Ich würde gerne eine Linie in einem Label zeichnen - als ersatz für
"Underline". Sinn: a. die Linie kann dann farblich unterschieden werden
und mit einem DashStyle vergeben werden.

Die Realisierung klappt soweit. Jedoch entspricht die Linienlànge nicht
exakt der Textlànge :-(

Ich habe hier zwei Ansàtze versucht, mittels SizeF und MeasureString,
jedoch führen diese nicht zum richtigen Ziel.

Hat jemand eine Idee oder weiß, was hier noch fehlen könnte?

Grüße
Robert

Ausschnitt aus dem LabelControl
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);

Pen _underlinePen = new Pen(Color.Black, 1);
_underlinePen.DashStyle = DashStyle.Solid;

SizeF _sizef = e.Graphics.MeasureString(this.Text, this.Font);
int _sizeStringWidth =
(int)e.Graphics.MeasureString(this.Text,this.Font).Width;

// Propertie _underlineYPosOffset -> dient zur Positionierung der Linie
(int-Wert)
float x = 0;
float y = _sizef.Height - _underlineYPosOffset;

float X = _sizeStringWidth; // < Lànge nicht korrekt
// float X = _sizef.Width; // < 2. Versuch

float Y = y;

e.Graphics.DrawLine(_underlinePen, x, y, X, Y);
}
 

Lesen sie die antworten

#1 Herfried K. Wagner [MVP]
27/12/2009 - 21:11 | Warnen spam
Hallo Robert!

"Robert Spence" schrieb:
Ich würde gerne eine Linie in einem Label zeichnen - als ersatz für
"Underline". Sinn: a. die Linie kann dann farblich unterschieden werden
und mit einem DashStyle vergeben werden.

Die Realisierung klappt soweit. Jedoch entspricht die Linienlànge nicht
exakt der Textlànge :-(

Ich habe hier zwei Ansàtze versucht, mittels SizeF und MeasureString,
jedoch führen diese nicht zum richtigen Ziel.
[...]
SizeF _sizef = e.Graphics.MeasureString(this.Text, this.Font);
int _sizeStringWidth =
(int)e.Graphics.MeasureString(this.Text,this.Font).Width;



Zum Zeichnen von Text wird seit .NET 2.0 nicht mehr GDI+, sondern GDI
verwendet. Deshalb nimm zum Messen testweise 'TextRenderer.MeasureText'.

M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ähnliche fragen