Frage

Ich habe eine Reihe von Anwendungseinstellungen (im Benutzerbereich) für meine benutzerdefinierte Rastersteuerung.Die meisten davon sind Farbeinstellungen.Ich habe ein Formular, in dem der Benutzer diese Farben anpassen kann, und ich möchte eine Schaltfläche zum Zurücksetzen auf die Standardfarbeinstellungen hinzufügen.Wie kann ich die Standardeinstellungen lesen?

Zum Beispiel:

  1. Ich habe eine Benutzereinstellung mit dem Namen CellBackgroundColor In Properties.Settings.
  2. Zur Entwurfszeit habe ich den Wert von festgelegt CellBackgroundColor Zu Color.White mit der IDE.
  3. Benutzersätze CellBackgroundColor Zu Color.Black in meinem Programm.
  4. Ich speichere die Einstellungen mit Properties.Settings.Default.Save().
  5. Der Benutzer klickt auf Restore Default Colors Taste.

Jetzt, Properties.Settings.Default.CellBackgroundColor kehrt zurück Color.Black.Wie komme ich zurück? Color.White?

War es hilfreich?

Lösung

@ozgur,

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

Beispiel:

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"

Andere Tipps

Beim Lesen von „Windows 2.0 Forms Programming“ bin ich auf diese beiden nützlichen Methoden gestoßen, die in diesem Zusammenhang hilfreich sein können:

ApplicationSettingsBase.Reload

ApplicationSettingsBase.Reset

Von MSDN:

Reload unterscheidet sich von Reset insofern, als Ersteres lädt den letzten Satz von gespeicherte Werte für die Anwendungseinstellungen, während letzteres die gespeicherte Standardwerte.

Die Verwendung wäre also:

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

Ich bin nicht wirklich sicher, ob das notwendig ist, es muss einen besseren Weg geben, sonst hoffe ich, dass jemand das nützlich findet;

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

Verwendung;

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

Properties.Settings.Default.Reset() setzt alle Einstellungen auf ihren ursprünglichen Wert zurück.

Ich habe dieses Problem dadurch umgangen, dass ich zwei Einstellungssätze habe.Ich verwende diejenige, die Visual Studio standardmäßig für die aktuellen Einstellungen hinzufügt, d. h. Properties.Settings.Default.Ich füge aber auch eine weitere Einstellungsdatei zu meinem Projekt hinzu „Projekt -> Neues Element hinzufügen -> Allgemein -> Einstellungsdatei“ und speichere dort die tatsächlichen Standardwerte, d. h. Properties.DefaultSettings.Default.

Ich achte dann darauf, dass ich dem nie schreibe Properties.DefaultSettings.Default Einstellungen, lesen Sie einfach daraus.Wenn Sie alles auf die Standardwerte zurücksetzen, müssen Sie lediglich die aktuellen Werte auf die Standardwerte zurücksetzen.

Wie kehre ich zu Color.White zurück?

Sie können dies auf zwei Arten tun:

  • Speichern Sie eine Kopie der Einstellungen, bevor der Benutzer sie ändert.
  • Zwischenspeichern Sie die vom Benutzer geänderten Einstellungen und speichern Sie sie in „Properties.Settings“, bevor die Anwendung geschlossen wird.

Ich habe diese Berufung gefunden ApplicationSettingsBase.Reset würde dazu führen, dass die Einstellungen auf ihre Standardwerte zurückgesetzt, aber gleichzeitig auch gespeichert werden.

Das gewünschte Verhalten bestand darin, sie auf die Standardwerte zurückzusetzen, sie aber nicht zu speichern (sodass der Benutzer, wenn er die Standardeinstellungen nicht mochte, sie bis zum Speichern wieder wiederherstellen konnte).

Ich habe eine Erweiterungsmethode geschrieben, die für meine Zwecke geeignet ist:

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);
            }
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top