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:

  1. Eu tenho uma configuração de usuário chamada CellBackgroundColor em Properties.Settings.
  2. Em tempo de design eu defino o valor de CellBackgroundColor para Color.White usando o IDE.
  3. Conjuntos de usuários CellBackgroundColor para Color.Black no meu programa.
  4. Eu salvo as configurações com Properties.Settings.Default.Save().
  5. 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?

Foi útil?

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

ApplicationSettingsBase.Reset

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);
            }
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top