Anzahl Zeichen ermitteln

28/01/2008 - 02:25 von Brian Schmalisch | Report spam
Hallo,

ich möchte nur die Anzahl Zeichen aus einem Stringbuilder ausrechnen, welche
in ein Label passen. Sollte der Text kürzer sein, dann soll der Rest mit
Leerzeichen aufgefüllt werden - diese müssten auch berechnet werden.

Hintergrund ist ein Scrollender Text zeichenweise in einem Label als nur
eine Zeile von rechts nach links. Es muss immer nach jedem Zeichen neu
berechnet werden, so dass nur der Teil Zeichen ab dem nàchsten, welcher
tatsàchlich passt, in dem Label drin ist.

Ich hatte so versucht, die Anzahl von Leerzeichen zu errechnen, welche die
ganze Lànge des Labels ausfüllen sollen - klappt aber nicht:

Graphics g = this.CreateGraphics();
SizeF m = new SizeF();
m = g.MeasureString(" ", this.Font);
float f = label1.Width / m.Width;
int anzahl = (int)Math.Round(f, 0);

for(int i=0;i<=anzahl;i++)
{
sb.Insert(0," ");
}


Brian
 

Lesen sie die antworten

#1 Frank Dzaebel
28/01/2008 - 07:41 | Warnen spam
Hallo Brian,

ich möchte nur die Anzahl Zeichen aus einem Stringbuilder ausrechnen,
welche in ein Label passen. Sollte der Text kürzer sein, dann soll der
Rest mit Leerzeichen aufgefüllt werden - diese müssten auch berechnet
werden.



Man sollte immer den *ganzen* Text "messen"!
Du hast (fàlschlich) in Deinem Beispiel versucht, von
der Lànge eines Zeichens auf die Lànge des ganzen
Strings zu schliessen. Am genauesten geht es da mit der:

[TextRenderer.MeasureText-Methode (String, Font) (System.Windows.Forms)]
http://msdn2.microsoft.com/de-de/library/y4xdbe66(VS.80).aspx

[TextRenderer.MeasureText-Methode (String, Font, Size)
(System.Windows.Forms)]
http://msdn2.microsoft.com/de-de/library/69ye7hc8(VS.80).aspx

int width = TextRenderer.MeasureText(label1.Text, this.Font).Width;
// anstatt "label1.Text" dann ggf. "stringBuilderInstanz.ToString()"

Beachte ggf. die TextFormatFlags für sehr genaue Justierung:

[TextFormatFlags-Enumeration (System.Windows.Forms)]
http://msdn2.microsoft.com/de-de/li...ormatflags(VS.80).aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen