Come posso perseguire efficacemente un oggetto font .Net?
-
02-07-2019 - |
Domanda
Caso d'uso: l'utente personalizza i caratteri di un oggetto nell'area di progettazione, che devo caricare / salvare nel mio archivio dati. Cioè impostazioni come Grassetto, Corsivo, Dimensione, Nome carattere devono essere persistenti.
Esiste un meccanismo semplice (e affidabile) per convertire / leggere da una rappresentazione in stringa dell'oggetto font (nel qual caso avrei bisogno di un solo attributo)? O più proprietà combinate con la logica personalizzata sono l'opzione giusta?
Soluzione
Usa 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
Se si desidera utilizzare la serializzazione XML, è possibile creare un wrapper di classe Font che memorizzerà alcuni sottogruppi di proprietà Font.
Nota (Gishu) - Non accedere mai direttamente a un convertitore di tipi. Accedere invece al convertitore appropriato utilizzando TypeDescriptor. Molto importante :)
Altri suggerimenti
Nel progetto a cui sto lavorando, ho scelto le proprietà multiple.
Salvo il carattere in una tabella di database suddividendone il nome, la dimensione, lo stile e l'unità e quindi persisto quei valori.
Ricreare il font su richiesta una volta recuperati questi valori è un gioco da ragazzi.
In quale tipo di archivio dati è necessario persistere? Se sono solo le impostazioni utente che possono essere mantenute in un file, è possibile serializzare l'oggetto font in un file di impostazioni in binario o xml (se si desidera poter modificare direttamente il file di configurazione). Gli spazi dei nomi di serializzazione (System.Xml.Serialization e System.Runtime.Serialization) forniscono tutti gli strumenti per farlo senza scrivere codice personalizzato.
Serializzazione del sito MSDN su XML: Serializzazione XML in .Net Framework
[EDIT] In modo così diverso l'oggetto font non è serializzabile. oops :( Siamo spiacenti.