2008-09-23 9 views
6

Usecase: L'utilisateur effectue des personnalisations de polices pour un objet sur la surface de conception, que j'ai besoin de charger/enregistrer dans ma banque de données. C'est à dire. les paramètres tels que Gras, Italique, Taille, Nom de police doivent être conservés.Comment persister efficacement un objet de police .Net?

Existe-t-il un mécanisme simple (et fiable) pour convertir/lire à partir d'une représentation sous forme de chaîne de l'objet police (auquel cas je n'aurais besoin que d'un seul attribut)? Ou est-ce que plusieurs propriétés combinées avec la logique personnalisée sont la bonne option?

Répondre

10

Utilisation 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 

Si vous souhaitez utiliser la sérialisation XML, vous pouvez créer wrapper de classe de polices qui va stocker un sous-ensemble de propriétés de police.

Note (Gishu) - N'accédez jamais directement à un convertisseur de type. Au lieu de cela, accédez au convertisseur approprié en utilisant TypeDescriptor. Très important :)

+0

Grand .. fonctionne comme prévu -..!. Merci aku vous vote plus proche de la marque 5K :) – Gishu

+0

Je suis heureux J'ai réussi à vous aider, merci de voter :) – aku

+1

Je pense que 'ConvertFromInvariantString()' devrait être utilisé comme contrepartie de 'Conv ertToInvariantString() '(au lieu de' ConvertFromString() 'vu dans l'exemple ci-dessus). – miroxlav

0

De quel type de magasin de données avez-vous besoin pour persister? Si seuls les paramètres utilisateur peuvent être conservés dans un fichier, vous pouvez sérialiser l'objet police dans un fichier de configuration binaire ou xml (si vous voulez pouvoir éditer directement le fichier de configuration). Les espaces de noms de sérialisation (System.Xml.Serialization et System.Runtime.Serialization) fournissent tous les outils pour cela sans écrire de code personnalisé.

MSDN Site sur la sérialisation XML: XML Serialization in the .Net Framework

[EDIT] Donc aparrently l'objet de police n'est pas serialisable. oups :(Désolé.

+0

L'objet de police n'est pas sérialisable. – aku

0

Dans le projet, je travaille, je suis allé avec les propriétés multiples.

Je sauvegarde de la police à une table de base de données en brisant son nom, la taille, le style et l'unité, puis persistent ces valeurs

Recréer la police à la demande une fois que ces valeurs sont ren- voyées est un jeu d'enfant

Questions connexes