Der Vorschlag, die Anwendungskonfigurationsdatei zu verwenden, ist knapp, aber zwei Dinge sind falsch.
Zuerst teilen alle Benutzer der Anwendung dieselbe Anwendungskonfigurationsdatei. Wenn Sie mehrere Benutzer haben (z. B. in einem Netzwerk oder auf einem anderen Computer), wird durch das Speichern einer Benutzereinstellung in der Anwendungskonfigurationsdatei diese Einstellung für alle Benutzer geändert. Eine zweite Sache, die falsch ist, ist, dass es unter einer Standardinstallation unter Vista sowieso nicht funktioniert: Standardmäßig gibt Vista dem Benutzer keinen Schreibzugriff auf irgendetwas unter dem Verzeichnis Program Files
, so dass Änderungen an der Anwendungskonfigurationsdatei gespeichert werden eine Ausnahme.
Die richtige Antwort ist, Benutzereinstellungen zu verwenden. Diese werden in der Benutzereinstellungsdatei der Anwendung gespeichert, die sich in einem (tief verschachtelten und OS-Versionsabhängigen) Unterverzeichnis des Benutzerverzeichnisses des Benutzers befindet. Die ConfigurationManager
lädt diese Einstellungen zur Laufzeit und ermöglicht es Ihnen, sie in Ihrem Code zu aktualisieren und zu speichern. In Visual Studio ist eine ganze Infrastruktur integriert, um dies (relativ) einfach zu machen, was gut ist, da es bei der ordnungsgemäßen Ausführung eine unheimliche Menge Code gegen die Klasse ConfigurationManager
schreibt. So funktioniert es:
Wenn Sie unter den Eigenschaften Ihres VS-Projekts nachsehen, sehen Sie einen Eintrag mit der Bezeichnung Settings.settings
. Wenn Sie darauf doppelklicken, wird Ihnen ein Raster angezeigt, in dem Sie Ihrem Projekt Einstellungen hinzufügen können. Sie geben den Namen der Einstellung an, wählen den Datentyp und den Standardwert und, im entscheidenden Fall, den Bereich. Die Einstellung kann Anwendungsumfang sein. In diesem Fall wird der Wert allen Benutzern der Anwendung gemeinsam und in der Anwendungskonfigurationsdatei gespeichert. Oder es kann ein Benutzerbereich sein, in welchem Fall jeder Benutzer seinen eigenen Wert für die Einstellung haben kann, und die Einstellung wird in der Benutzereinstellungsdatei gespeichert.
Wenn Sie diesem Raster eine Einstellung hinzufügen, generiert VS Code, um die Einstellung für Ihren Code verfügbar zu machen. Im Grunde erstellt es eine Klasse, die diese Einstellungen Ihrem Code als Eigenschaften eines Singleton-Objekts zur Verfügung stellt. (Sie können diesen Code sehen, wenn Sie wissen möchten, was Sie davon abhalten, selbst zu tun; er wird in der Datei 'Settings.Designer.cs' gespeichert, die in der Projektansicht unter 'Einstellungen.Einstellungen' erstellt wurde.) Diese Klasse wird auch jedes Mal neu generiert, wenn Sie die Informationen im Raster Einstellungen ändern. Sobald Sie eine Einstellung in der Raster-Einstellungen erstellen, können Sie es in Ihrem Code verweisen thusly:
ctl.BackColor = Properties.Settings.Default.BackColor;
Benutzereinstellungen von Ihrem Code geändert werden können:
Properties.Settings.Default.BackColor = newBackColor;
Und Sie können sie für den Benutzer speichern Einstellungsdatei wie folgt:
Wenn diese Einstellungen als Eigenschaften einer Klasse verfügbar gemacht werden, ist dies aus vielen Gründen nützlich. Eine der wichtigsten ist, dass, da sie Eigenschaften sind (und nicht etwa Wörterbucheinträge, auf die mit einem Schlüssel zugegriffen wird, so funktioniert der meiste Code, den die Leute gegen die Klasse ConfigurationManager
schreiben), die Kompilierungszeit der Namen Verwenden Sie in Code. Sie werden nie zur Laufzeit ein NullReferenceException
bekommen, wenn Sie den Namen einer Einstellung falsch schreiben; Sie erhalten einen Fehler, wenn Sie es stattdessen kompilieren.
Es gibt einige Feinheiten bei der Verwendung von Benutzereinstellungen. Eine der weniger offensichtlichen ist: Was passiert, wenn Sie eine neue Version der Software erstellen?Die Benutzereinstellungen werden in einem Verzeichnis gespeichert, das mit der Versionsnummer des Programms verknüpft ist. Wenn Sie eine neue Version veröffentlichen, ist die Datei mit den Benutzereinstellungen nicht vorhanden. Wie hält man den Benutzer davon ab, alle seine Einstellungen zu verlieren, wenn er das Programm aktualisiert?
Dies ist auch in der Settings
Klasse eingebaut; alles, was Sie tun müssen, ist dies:
if (Properties.Settings.Default.UpgradeSettings)
{
Properties.Settings.Default.Upgrade();
Properties.Settings.Default.UpgradeSettings = false;
}
Dies wird die Benutzereinstellungen aus der vorherigen Version in die Einstellungsdatei für die neue Version kopieren.
Das Schema der Anwendungseinstellungen ist nicht der * sehr * letzte Ort, an dem ein Entwickler, der neu in der Idee der Benutzereinstellungen ist, suchen sollte, aber es ist nah dran. –
Ich habe nicht viel Wissen über Einstellungsdatei. Gibt es einen anderen Weg? – Sheetal