2008-09-23 4 views
6

Usecase: Der Benutzer nimmt Schriftanpassungen an einem Objekt auf der Entwurfsoberfläche vor, das ich in meinen Datenspeicher laden/speichern muss. I.e. Einstellungen wie Fett, Kursiv, Größe und Schriftart müssen beibehalten werden.Wie behalte ich effektiv ein .NET Font-Objekt?

Gibt es einen einfachen (und zuverlässigen) Mechanismus zum Konvertieren/Zurücklesen einer String-Repräsentation des Font-Objekts (in diesem Fall würde ich nur ein Attribut benötigen)? Oder sind mehrere Eigenschaften kombiniert mit benutzerdefinierter Logik die richtige Option?

Antwort

10

Verwendung TypeConverter:

Font font = new Font("Arial", 12, GraphicsUnit.Pixel); 

TypeConverter converter = TypeDescriptor.GetConverter(typeof (Font)); 

string fontStr = converter.ConvertToInvariantString(font); 

Font font2 = (Font) converter.ConvertFromString(fontStr); 

Console.WriteLine(font.Name == font2.Name); // prints True 

Wenn Sie die XML-Serialisierung verwenden möchten, können Sie Font-Klasse-Wrapper erstellen, die eine gewisse Teilmenge von Font-Eigenschaften gespeichert werden.

Hinweis (Gishu) - Greifen Sie niemals direkt auf einen Typwandler zu. Greifen Sie stattdessen mit TypeDescriptor auf den entsprechenden Konverter zu. Sehr wichtig :)

+0

Große .. funktioniert wie in der Werbung -..!. Dank aku Abstimmung Sie näher an die 5K Marke :) – Gishu

+0

ich bin froh, Ich habe es geschafft, Ihnen zu helfen, danke für die Abstimmung :) – aku

+1

Ich denke, dass 'ConvertFromInvariantString()' sollte als Gegenstück von 'Conv verwendet werden ertToInvariantString() '(anstelle von' ConvertFromString() 'im obigen Beispiel). – miroxlav

0

Welche Art von Datenspeicher benötigen Sie, um dies zu erhalten? Wenn nur Benutzereinstellungen in einer Datei beibehalten werden können, können Sie das Schriftobjekt in eine Einstellungsdatei in Binär- oder XML-Format serialisieren (wenn Sie die Konfigurationsdatei direkt bearbeiten möchten). Die Serialisierungsnamespaces (System.Xml.Serialization und System.Runtime.Serialization) stellen alle Tools zur Verfügung, ohne dass benutzerdefinierter Code geschrieben werden muss.

MSDN-Site auf XML-Serialisierung: XML Serialization in the .Net Framework

[EDIT] So aparrently das Font-Objekt ist nicht serialisable. oops :(Leider.

+0

Das Font-Objekt ist nicht serialisierbar. – aku

0

Im Projekt arbeite ich auf, ging ich mit den vielfältigen Eigenschaften.

ich die Schriftart in einer Datenbanktabelle speichern Name, Größe, Stil und Einheit durch Ausbrechen und dann diese Werte bestehen

auf Anfrage die Schrift Recreating einmal werden diese Werte retrived ist ein Kinderspiel

Verwandte Themen