Hallo,
ich möchte gerne einen System.Drawing.Font erzeugen, der mit möglichst wenig Aufwand aus einem String à la "Times New Roman; 9,75pt; style=Bold, Italic" gebildet wird. Solche ein String findet man z.B. in der app.config. Der "Font-String" soll aber zukünftig aus einer Datenbank mit der selben Syntax gelesen werden.
Leider findet sich in der Font-Klasse kein Konstruktor, der direkt einen solchen String verarbeiten kann. Gibt es eine einfache Möglichkeit hierzu oder muss man den String aufdröseln um an FontFamily, Style usw. zu kommen?
Hallo,
das Problem hatte ich auch mal. Ich habe die Schriftart dann binär serialisiert.
http://dotnet-snippets.de/dns/font---objekte-binaer-serialisieren-und-deserialisieren-SID151.aspx
Jan
Geht auch einfacher. Schau dir mal die Klasse TypeConverter bzw. FontConverter an.
@jan223: So richtig habe ich dein Beispiel nicht verstanden...
@marsgk: Danke für den Tipp.
try {
FontConverter fontConverter = new FontConverter();
f = (Font)fontConverter.ConvertFromString(fontString);
}
catch (NotSupportedException e) {
throw(...);
}
Aber egal, was ich als fontString einsetze, es endet immer in "Microsoft Sans Serif". 😦
Wahrscheinlich werde ich für jede Font-Einstellung eine eigene Property in der Datenbank ablegen und dann den Font direkt mit diesen Einstellungen erzeugen, anstatt mit einem FontString.
P.S.: Wie bekomme ich bloß den Code im Posting richtig eingerückt?
Du musst deinen Font-String geringfügig ändern. Je nach Culture ein anderer Delimeter. Darum verwende am Besten InvariantCulture.
Btw.: Bei einem deutschen Locale sollte dein String passen.
TypeConverter converter;
converter = TypeDescriptor.GetConverter(typeof(Font));
Font f = (Font)converter.ConvertFromInvariantString("Times New Roman, 9.75pt, style=Bold, Italic");
Console.WriteLine(converter.ConvertToInvariantString(f).ToString());
Wobei: Wenn bei ConvertFromInvariantString() die übergebene Schriftart aus dem String nicht gefunden wird, wird auch wieder "Microsoft Sans Serif" genommen. Leider wird dann keine Exception geworfen, wo ich gezielt darauf reagieren kann.