Standardanwendungseinstellungen in C# lesen
-
09-06-2019 - |
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:
- Ich habe eine Benutzereinstellung mit dem Namen
CellBackgroundColor
InProperties.Settings
. - Zur Entwurfszeit habe ich den Wert von festgelegt
CellBackgroundColor
ZuColor.White
mit der IDE. - Benutzersätze
CellBackgroundColor
ZuColor.Black
in meinem Programm. - Ich speichere die Einstellungen mit
Properties.Settings.Default.Save()
. - 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
?
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
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);
}
}
}
}