Lecture des paramètres d'application par défaut en C#
j'ai un certain nombre de paramètres d'application (dans la portée de l'utilisateur) pour mon contrôle de grille personnalisé. La plupart d'entre eux sont des paramètres de couleur. J'ai une forme où l'utilisateur peut personnaliser ces couleurs et je veux ajouter un bouton pour revenir aux paramètres de couleur par défaut. Comment puis-je lire les paramètres par défaut?
par exemple:
- j'ai un paramètre utilisateur nommé
CellBackgroundColor
dansProperties.Settings
. - au moment de la conception je fixe la valeur de
CellBackgroundColor
àColor.White
en utilisant L'IDE. - Utilisateur définit
CellBackgroundColor
àColor.Black
dans mon programme. - j'enregistre les paramètres avec
Properties.Settings.Default.Save()
. - clique sur le bouton
Restore Default Colors
.
Maintenant, Properties.Settings.Default.CellBackgroundColor
renvoie Color.Black
. Comment revenir à Color.White
?
7 réponses
@ozgur,
Settings.Default.Properties["property"].DefaultValue // initial value from config file
exemple:
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"
Lecture "Windows 2.0 formes programmation", je suis tombé sur ces 2 méthodes utiles qui peuvent être d'une aide dans ce contexte:
ApplicationSettingsBase.Recharger
Applicationsbase.Réinitialiser
de MSDN:
Reload contrastes avec Reset in that l'ancienne charge la dernière série de paramètres de l'application sauvegardés valeurs, alors que ce dernier chargera le les valeurs par défaut.
donc l'usage serait:
Properties.Settings.Default.Reset()
Properties.Settings.Default.Reload()
Je ne suis pas vraiment sûr que ce soit nécessaire, il doit y avoir une voie plus claire, sinon j'espère que quelqu'un trouvera cette 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));
}
}
"151920920 utilisation";
var setting = Settings.Default.Properties.GetDefault<double>("MySetting");
Properties.Settings.Default.Reset()
va réinitialiser tous les paramètres à leur valeur originale.
Comment puis-je revenir à la couleur.Blanc?
deux façons de faire:
- sauvegardez une copie des paramètres avant que l'utilisateur ne les modifie.
- Cache Les paramètres modifiés par l'utilisateur et sauvegardez-les dans Propriétés.Paramètres avant la fermeture de l'application.
j'ai contourné ce problème en ayant 2 ensembles de paramètres. J'utilise celui que Visual Studio ajoute par défaut pour les paramètres actuels, i.e. Properties.Settings.Default
. Mais j'ajoute aussi un autre fichier de paramètres à mon projet "Project - > Ajouter un nouvel article -> General - > Settings File" et y stocker les valeurs par défaut réelles, i.e. Properties.DefaultSettings.Default
.
Je m'assure alors que je n'écris jamais dans les paramètres Properties.DefaultSettings.Default
, il suffit de lire à partir de celui-ci. Tout changer aux valeurs par défaut est alors un cas de réglage les valeurs actuelles aux valeurs par défaut.
j'ai trouvé qu'appeler ApplicationSettingsBase.Reset
aurait pour effet de réinitialiser les paramètres à leurs valeurs par défaut, mais aussi de les sauver en même temps.
le comportement que je voulais était de les Réinitialiser aux valeurs par défaut, mais pas pour les sauver (de sorte que si l'utilisateur n'aimait pas les valeurs par défaut, jusqu'à ce qu'elles soient sauvegardées, ils pouvaient les retourner).
j'ai écrit une méthode d'extension qui était appropriée à mes fins:
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);
}
}
}
}