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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top