Feedback

Strings verkürzen

Sprache: C#

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. [b]Hinweis:[/b] Ein Beispielprojekt ist auf meiner Webseite zu finden: http://code-13.net/Tutorials/NET/StringShorter.aspx [b]Benötigte Namespaces:[/b] [code]System System.Drawing System.Text System.Windows.Forms[/code] [b]Benötigte (zusätzliche) Verweise:[/b] [code]System.Windows.Forms.dll System.Drawing [/code] [b]Hinweis:[/b] 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();
}
/// <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();
}