Warum wird nicht Properties.Settings.Default gespeichert werden?
-
22-09-2019 - |
Frage
Ich schrieb dies schnell Test
Warum Arent meine Einstellungen gespeichert werden? Das erste Mal, dass ich dies laufe ich habe 3 (alt) / 3 (Strom) Elemente. Das zweite Mal, wenn ich 3 (alt) / 5 (Strom), drittes Mal 5 (alt) / 5 (Strom).
Wenn ich die app schließen verschwinden die Einstellungen vollständig. Seine 3 wieder, wenn ich ausführen. Ich habe keine Änderungen an der App. Warum Arent meine Einstellungen gespeichert werden
private void button2_Click(object sender, EventArgs e)
{
MyApp.Properties.Settings.Default.Reload();
var saveDataold = MyApp.Properties.Settings.Default.Context;
var saveData = MyApp.Properties.Settings.Default.Context;
saveData["user"] = textBox1.Text;
saveData["pass"] = textBox2.Text;
MyApp.Properties.Settings.Default.Save();
}
Lösung
Sie sollten die freiliegenden Eigenschaften werden anstelle Ihre Daten im Rahmen der Umsetzung:
var saveData = MyApp.Properties.Settings.Default;
saveData.user = textBox1.Text;
saveData.pass = textBox2.Text;
Der Kontext
bietet kontextuellen Informationen, die kann der Anbieter verwenden, wenn persistierende Einstellungen
und ist in meinem Verständnis der tatsächlichen Einstellwerte nicht verwendet zu speichern.
Update: , wenn Sie die Einstellungen Editor in Visual Studio nicht verwenden möchten, die stark typisierte Eigenschaften zu erzeugen, können Sie es selbst codieren. Der Code erzeugt durch VS eine Struktur wie folgt aussehen:
[UserScopedSetting]
[DebuggerNonUserCode]
[DefaultSettingValue("")]
public string SettingName
{
get { return ((string)(this["SettingName"])); }
set { this["SettingName"] = value; }
}
Sie können leicht weitere Eigenschaften hinzufügen, indem Sie die Settings.Designer.cs Datei bearbeiten.
Wenn Sie die stark typisierte Eigenschaften nicht verwenden möchten Sie die this[name]
Indexer direkt nutzen können. Dann wird Ihr Beispiel wie folgt aussehen:
var saveData = MyApp.Properties.Settings.Default;
saveData["user"] = textBox1.Text;
saveData["pass"] = textBox2.Text;