Pergunta

Usecase: O usuário faz personalizações de fonte para um objeto na superfície de design, que eu preciso para carregar / salvar para meu armazenamento de dados. Ou seja, configurações como negrito, itálico, tamanho, necessidade Nome da fonte para persistiu.

Existe algum fácil (e confiável) mecanismo para converter / ler de volta a partir de uma representação de string do objeto de fonte (caso em que eu iria precisar de apenas um atributo)? Ou é várias propriedades combinadas com lógica personalizada a opção certa?

Foi útil?

Solução

Use 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 você quiser usar a serialização XML pode criar invólucro classe Font que armazenará um subconjunto de propriedades de fonte.

Nota (Gishu) - Nunca o acesso de um conversor de tipo diretamente. Em vez disso, acessar o conversor apropriado usando TypeDescriptor. Muito importante:)

Outras dicas

No projeto que estou trabalhando, eu fui com as várias propriedades.

Eu salvar a fonte para uma tabela de banco de dados, quebrando seu nome, tamanho, estilo e unidade e, em seguida, persistem esses valores.

Recriando a fonte sob demanda uma vez que estes valores são retrived é um piscar de olhos.

Que tipo de armazenamento de dados que você precisa para persistir isto? Se é configurações do usuário apenas que pode ser mantido em um arquivo que você poderia publicando o objeto de fonte para um arquivo de configurações em binário ou XML (se você quer ser capaz de editar o arquivo de configuração diretamente). Os namespaces de serialização (System.Xml.Serialization e System.Runtime.Serialization) fornecer todas as ferramentas para fazer isso sem escrever código personalizado.

MSDN Site no XML de serialização: XML serialização no .NET Framework

[EDIT] Então aparrently o objeto de fonte não é serialisable. oops :( Desculpe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top