Question

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 un formulaire où l'utilisateur peut personnaliser ces couleurs et je souhaite 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:

  1. J'ai un paramètre utilisateur nommé CellBackgroundColor dans Properties.Settings.
  2. Au moment de la conception, j'ai défini la valeur de CellBackgroundColor à Color.White en utilisant l'EDI.
  3. Ensembles utilisateur CellBackgroundColor à Color.Black dans mon programme.
  4. J'enregistre les paramètres avec Properties.Settings.Default.Save().
  5. L'utilisateur clique sur le Restore Default Colors bouton.

Maintenant, Properties.Settings.Default.CellBackgroundColor Retour Color.Black.Comment puis-je revenir à Color.White?

Était-ce utile?

La solution

@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"

Autres conseils

En lisant « Programmation Windows 2.0 Forms », je suis tombé sur ces 2 méthodes utiles qui peuvent être utiles dans ce contexte :

ApplicationSettingsBase.Reload

ApplicationSettingsBase.Reset

Depuis MSDN :

Le rechargement contraste avec la réinitialisation en ce que le premier chargera le dernier ensemble de valeurs de paramètres d'application enregistrées, tandis que le second chargera les valeurs par défaut enregistrées.

L'utilisation serait donc :

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

Je ne suis pas vraiment sûr que cela soit nécessaire, il doit y avoir un moyen plus simple, sinon j'espère que quelqu'un trouvera cela 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));
    }
}

usage;

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

Properties.Settings.Default.Reset() réinitialisera tous les paramètres à leur valeur d’origine.

J'ai contourné ce problème en disposant de 2 jeux de paramètres.J'utilise celui que Visual Studio ajoute par défaut pour les paramètres actuels, c'est-à-dire Properties.Settings.Default.Mais j'ajoute également un autre fichier de paramètres à mon projet "Projet -> Ajouter un nouvel élément -> Général -> Fichier de paramètres" et j'y stocke les valeurs par défaut réelles, c'est-à-dire Properties.DefaultSettings.Default.

Je m'assure ensuite de ne jamais écrire au Properties.DefaultSettings.Default paramètres, il suffit de le lire.Tout rétablir aux valeurs par défaut consiste alors simplement à rétablir les valeurs actuelles aux valeurs par défaut.

Comment puis-je revenir à Color.White ?

Vous pouvez procéder de deux manières :

  • Enregistrez une copie des paramètres avant que l'utilisateur ne la modifie.
  • Mettez en cache les paramètres modifiés par l’utilisateur et enregistrez-les dans Properties.Settings avant la fermeture de l’application.

J'ai trouvé cet appel ApplicationSettingsBase.Reset aurait pour effet de remettre les paramètres à leurs valeurs par défaut, mais aussi de les sauvegarder par la même occasion.

Le comportement que je souhaitais était de les réinitialiser aux valeurs par défaut mais pas de les enregistrer (de sorte que si l'utilisateur n'aimait pas les valeurs par défaut, jusqu'à ce qu'elles soient enregistrées, il pouvait les rétablir).

J'ai écrit une méthode d'extension adaptée à mes besoins :

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);
            }
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top