Besonders wenn man lokalisierte Anwendungen erstellt, ist es manchmal erforderlich Zeichenfolgen (Strings) auch verkürzen zu können. Diese Methode verkürzt einen String auf die angegebene Pixellänge.
Näheres steht in der XML-Dokumentation.
Hinweis: Ein Beispielprojekt ist auf meiner Webseite zu finden:
http://code-13.net/Tutorials/NET/StringShorter.aspx
Benötigte Namespaces:System
System.Drawing
System.Text
System.Windows.Forms
Benötigte (zusätzliche) Verweise:System.Windows.Forms.dll
System.Drawing
Hinweis: Die Methode ist als Erweiterung für System.String implementiert.
/// <summary>
/// Verkürzt einen String auf eine Bestimmte Länge in Pixeln.
/// </summary>
/// <param name="text">Der zu verkürzende Text.</param>
/// <param name="font">Die zu verwendende Schriftart für die Ermittlung.</param>
/// <param name="length">Die Maximallänge der zurück zu gebenden Zeichenfolge in Pixeln.</param>
/// <param name="appendEllipses"><c>True</c>, wenn in die angegebene Länge noch 3 Punkte (...) beinhalten soll, andernfalls <c>False</c>.</param>
/// <returns>Eine Zeichenfolge, welche in der angegebenen Schriftart <paramref name="length"/> Pixel lang ist.</returns>
/// <exception cref="System.ArgumentOutOfRangeException">Wird ausgelöst, wenn <paramref name="length"/> kleiner oder gleich 0 ist.</exception>
/// <exception cref="System.ArgumentNullException">Wird ausgelöst, wenn <paramref name="font"/> oder <paramref name="text"/> <c>null</c> ist.</exception>
public static string Short(this string text, Font font, int length, bool appendEllipses)
{
if (length <= 0)
throw new ArgumentOutOfRangeException("length", "length > 0!");
if (font == null)
throw new ArgumentNullException("font");
if (text == null)
throw new ArgumentNullException("text");
StringBuilder sb = new StringBuilder();
foreach (char c in text)
{
if (TextRenderer.MeasureText(sb.ToString() + c + (appendEllipses ? "..." : ""), font).Width < length)
sb.Append(c);
}
if (appendEllipses)
sb.Append("...");
return sb.ToString();
}
Kommentare zum Snippet