Laden...

Font aus Resourcestring erzeugen

Erstellt von retnug vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.639 Views
R
retnug Themenstarter:in
122 Beiträge seit 2007
vor 16 Jahren
Font aus Resourcestring erzeugen

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?

460 Beiträge seit 2004
vor 16 Jahren

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

M
1.439 Beiträge seit 2005
vor 16 Jahren

Geht auch einfacher. Schau dir mal die Klasse TypeConverter bzw. FontConverter an.

R
retnug Themenstarter:in
122 Beiträge seit 2007
vor 16 Jahren

@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?

M
1.439 Beiträge seit 2005
vor 16 Jahren

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());

R
retnug Themenstarter:in
122 Beiträge seit 2007
vor 16 Jahren

Jau, vielen Dank! So funktioniert's.

R
retnug Themenstarter:in
122 Beiträge seit 2007
vor 16 Jahren

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.