La lettura di default le impostazioni dell'applicazione in C#
-
09-06-2019 - |
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:
- Ho un impostazione utente di nome
CellBackgroundColor
inProperties.Settings
. - In fase di progettazione è necessario impostare il valore di
CellBackgroundColor
perColor.White
con l'IDE. - Utente imposta
CellBackgroundColor
perColor.Black
nel mio programma. - Salvare le impostazioni con
Properties.Settings.Default.Save()
. - 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
?
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
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);
}
}
}
}