Domanda

Ho un certo numero di impostazioni dell'applicazione (in ambito utente) per la mia griglia personalizzata di controllo.La maggior parte di loro sono le impostazioni del colore.Ho un form in cui l'utente può personalizzare i colori e voglio aggiungere un pulsante per tornare alle impostazioni predefinite.Come faccio a leggere le impostazioni di default?

Per esempio:

  1. Ho un impostazione utente di nome CellBackgroundColor in Properties.Settings.
  2. In fase di progettazione è necessario impostare il valore di CellBackgroundColor per Color.White con l'IDE.
  3. Utente imposta CellBackgroundColor per Color.Black nel mio programma.
  4. Salvare le impostazioni con Properties.Settings.Default.Save().
  5. L'utente fa clic sul Restore Default Colors il pulsante.

Ora, Properties.Settings.Default.CellBackgroundColor restituisce Color.Black.Come faccio a tornare a Color.White?

È stato utile?

Soluzione

@ozgur,

Settings.Default.Properties["property"].DefaultValue // initial value from config file

Esempio:

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"

Altri suggerimenti

La lettura di "Windows 2.0 Forme di Programmazione", mi sono imbattuto in questi 2 metodi utili che possono essere di aiuto in questo contesto:

ApplicationSettingsBase.Ricarica

ApplicationSettingsBase.Reset

Da MSDN:

Ricaricare contrasti con Reset in che l'ex di caricare l'ultimo set di salvate le impostazioni dell'applicazione dei valori, considerando che l'ultimo carico salvato i valori di default.

Quindi l'utilizzo sarebbe:

Properties.Settings.Default.Reset()
Properties.Settings.Default.Reload()

Im non realmente sicuro che questo è necessario, ci deve essere un modo più accurato, altrimenti spero che qualcuno trova utile;

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));
    }
}

di utilizzo;

var setting = Settings.Default.Properties.GetDefault<double>("MySetting");

Properties.Settings.Default.Reset() verranno ripristinate tutte le impostazioni al loro valore originale.

Ho questo problema da avere 2 set di impostazioni.Io uso quello che Visual Studio aggiunge di default per le impostazioni correnti, cioè Properties.Settings.Default.Ma ho anche aggiungere un file di settings per il mio progetto "Progetto -> Aggiungi Nuovo Elemento -> Generale -> Impostazioni File" e memorizzare i reali valori di default in là, cioè Properties.DefaultSettings.Default.

Ho quindi assicurarsi che non ho mai scritto il Properties.DefaultSettings.Default impostazioni, basta leggere.Cambiando tutto e ritornare ai valori predefiniti è quindi solo un caso di impostazione i valori di corrente e ritornare ai valori predefiniti.

Come faccio a tornare al Colore.Bianco?

Due modi si può fare:

  • Salvare una copia delle impostazioni prima che l'utente cambia.
  • La Cache l'utente modificato le impostazioni e salvare le Proprietà.Impostazioni di prima applicazione si chiude.

Ho trovato che la chiamata ApplicationSettingsBase.Reset avrebbe l'effetto di reimpostare le impostazioni ai loro valori di default, ma anche per il loro salvataggio, allo stesso tempo.

Il comportamento volevo ripristinare i valori di default, ma non per salvare la loro (in modo che se l'utente non è come le impostazioni predefinite, fino a quando sono stati salvati si può tornare indietro).

Ho scritto un metodo di estensione che è adatto per i miei scopi:

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);
            }
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top