it-swarm.com.de

C # Settings.Default.Save () nicht speichern?

dieser Fehler ist ziemlich ungewöhnlich. Grundsätzlich wird mein Code den Settings.Default.Example ändern, dann das Programm speichern und neu starten. Beim Laden wird ein Meldungsfeld angezeigt. Seltsamerweise wird beim Laden des Formulars ein leerer Wert angezeigt.

Hier ist mein Code:

Main.cs
    private void Button1_Click(object sender, EventArgs e)
    {
        Settings.Default.Example = "Somevalue"; //Sets a value to the settings
        Settings.Default.Save(); // Save it
        MessageBox.Show(Settings.Default.Example); //Confirming it has been saved
        Application.Restart();
    }

    private void Main_Load(object sender, EventArgs e)
    {
        MessageBox.Show(Settings.Default.Example); // Here is the weird part, it shows empty.
    }

Der MessageBox zeigt "Somevalue" an, wenn auf die Schaltfläche geklickt wurde, dann wird die Anwendung neu gestartet und der angezeigte MessageBox war leer. Wenn Sie den Vorgang jedoch wiederholen, indem Sie erneut auf die Schaltfläche klicken und erneut starten, wird der Wert "Somevalue" MessageBox angezeigt. Bitte helfen Sie! Danke vielmals!

17
user1494994

Möglicherweise haben Sie den gleichen Fehler ausgeführt wie ich: Setzen Sie scope der Einstellung aufApplication. Diese Einstellungen sind nicht gespeichert .

Setzen Sie ihn aufUser, um das Problem zu lösen.

34

rene ist korrekt - Sie müssen Default.Reload aufrufen, nachdem Sie die Save-Methode aufgerufen haben:

Settings.Default.Save();
Settings.Default.Reload();

Möglicherweise ein Fehler -?

Als Antwort posten, um die Sichtbarkeit zu erhöhen -

4
MaurGi

Nach einem ganzen Tag des Erforschens und Studierens des Themas konnte ich dies lösen, indem ich die Konfiguration dem Benutzer übermittelte:

Using System.Configuration; 

Properties.Settings.Default.strinconn = txt_stringconn.Text;
Properties.Settings.Default.Save ();
Properties.Settings.Default.Upgrade ();
MessageBox.Show ("Saved Settings");
Application.Restart ();
4

Hüte dich vor dem Anruf

Settings.Default.Reload();

nach each

Settings.Default.Save();

Die Save () - Funktion speichert Ihre Änderungen tatsächlich in der Datei, wird jedoch nicht im laufenden Code angezeigt. Ihr Code behält also die Kopie der vorherigen Version der Datei bei. 

Wenn Sie Save () an einem anderen Ort in Ihrem Code aufrufen, wird die erste Änderung überschrieben, und die erste Änderung wird auf den ursprünglichen Wert zurückgesetzt. 

1
AtillaBaspinar

Wenn Ihre AssemblyInfo.cs-Datei einen * in der Assembly-Version hat, wird die Datei bei jedem Build aktualisiert, sodass Sie keine Persistenz oder Zuverlässigkeit sehen, wenn Sie diese nicht in eine feste Zahl ändern und alles neu erstellen und dann alles erneut testen.

Wenn Sie Ihre Anwendung testen müssen, wie es in diesem Fall tatsächlich funktioniert, sollten Sie die Exe-Datei besser ausführen. Wenn Sie in Visual Studio im Debug-Modus ausgeführt werden, wird das Speichern dieser Einstellungen einige Zeit dauern. Gehen Sie zum Debug-Ordner und führen Sie das Exe aus. Sie erhalten die Nachrichten wie erwartet.

0
Damith

Bitte schau nach diese Frage

Probieren Sie insbesondere den folgenden Code aus einer Antwort aus:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;

Check out diese Übersicht , vielleicht sind Sie auf eine Einschränkung gestoßen, die sich aus Ihrer Frage nicht leicht erkennen lässt.

Dieser Codeprojekt-Artikel kann hilfreich sein.

0
Mare Infinitus

haben Sie versucht, ConfigurationManager.RefreshSection aufzurufen, bevor Sie überprüft haben, ob die Anzeige gespeichert wurde, können Sie es nach dem Neuladen erneut versuchen

0
Scott Selby