Lendo configurações padrão do aplicativo em C#
-
09-06-2019 - |
Pergunta
Tenho várias configurações de aplicativo (no escopo do usuário) para meu controle de grade personalizado.A maioria deles são configurações de cores.Tenho um formulário onde o usuário pode personalizar essas cores e quero adicionar um botão para reverter para as configurações de cores padrão.Como posso ler as configurações padrão?
Por exemplo:
- Eu tenho uma configuração de usuário chamada
CellBackgroundColor
emProperties.Settings
. - Em tempo de design eu defino o valor de
CellBackgroundColor
paraColor.White
usando o IDE. - Conjuntos de usuários
CellBackgroundColor
paraColor.Black
no meu programa. - Eu salvo as configurações com
Properties.Settings.Default.Save()
. - O usuário clica no
Restore Default Colors
botão.
Agora, Properties.Settings.Default.CellBackgroundColor
retorna Color.Black
.Como faço para voltar Color.White
?
Solução
@ozgur,
Settings.Default.Properties["property"].DefaultValue // initial value from config file
Exemplo:
string foo = Settings.Default.Foo; // Foo = "Foo" by default
Settings.Default.Foo = "Boo";
Settings.Default.Save();
string modifiedValue = Settings.Default.Foo; // modifiedValue = "Boo"
string originalValue = Settings.Default.Properties["Foo"].DefaultValue as string; // originalValue = "Foo"
Outras dicas
Lendo "Programação de Formulários do Windows 2.0", me deparei com estes 2 métodos úteis que podem ser úteis neste contexto:
ApplicationSettingsBase.Reload
Do MSDN:
Recarregar contrasta com a redefinição, pois o primeiro carregará o último conjunto de valores de configurações de aplicativos salvos, enquanto o último carregará os valores padrão salvos.
Então o uso seria:
Properties.Settings.Default.Reset()
Properties.Settings.Default.Reload()
Não tenho certeza se isso é necessário, deve haver uma maneira mais simples, caso contrário, espero que alguém ache isso útil;
public static class SettingsPropertyCollectionExtensions
{
public static T GetDefault<T>(this SettingsPropertyCollection me, string property)
{
string val_string = (string)Settings.Default.Properties[property].DefaultValue;
return (T)Convert.ChangeType(val_string, typeof(T));
}
}
uso;
var setting = Settings.Default.Properties.GetDefault<double>("MySetting");
Properties.Settings.Default.Reset()
redefinirá todas as configurações para seus valores originais.
Resolvi esse problema tendo 2 conjuntos de configurações.Eu uso aquele que o Visual Studio adiciona por padrão para as configurações atuais, ou seja, Properties.Settings.Default
.Mas também adiciono outro arquivo de configurações ao meu projeto "Projeto -> Adicionar novo item -> Geral -> Arquivo de configurações" e armazeno os valores padrão reais nele, ou seja, Properties.DefaultSettings.Default
.
Eu então me certifico de nunca escrever para o Properties.DefaultSettings.Default
configurações, basta ler a partir dele.Mudar tudo de volta para os valores padrão é apenas um caso de definir os valores atuais de volta para os valores padrão.
Como volto para Color.White?
Duas maneiras de fazer:
- Salve uma cópia das configurações antes que o usuário as altere.
- Armazene em cache as configurações modificadas pelo usuário e salve-as em Properties.Settings antes de o aplicativo fechar.
Eu encontrei esse chamado ApplicationSettingsBase.Reset
teria o efeito de redefinir as configurações para seus valores padrão, mas também salvá-las ao mesmo tempo.
O comportamento que eu queria era redefini-los para os valores padrão, mas não salvá-los (para que, se o usuário não gostasse dos padrões, até que fossem salvos, eles pudessem revertê-los).
Eu escrevi um método de extensão adequado aos meus propósitos:
using System;
using System.Configuration;
namespace YourApplication.Extensions
{
public static class ExtensionsApplicationSettingsBase
{
public static void LoadDefaults(this ApplicationSettingsBase that)
{
foreach (SettingsProperty settingsProperty in that.Properties)
{
that[settingsProperty.Name] =
Convert.ChangeType(settingsProperty.DefaultValue,
settingsProperty.PropertyType);
}
}
}
}