ce bug est assez inhabituel. Fondamentalement, mon code va changer le Settings.Default.Example
puis sauvegarder et redémarrer le programme. Puis, quand il charge, il affiche une boîte de message. Cependant, curieusement, il affiche une valeur vide lors du chargement du formulaire.
Voici mon 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.
}
La MessageBox
affichera "Somevalue" lorsque le bouton sera cliqué, puis l'application redémarrera et la MessageBox
affichée sera vide. Cependant, répéter le processus en cliquant une fois de plus sur le bouton puis en le redémarrant indique la "variable" MessageBox
. S'il vous plaît aider! Merci beaucoup!
Vous avez peut-être commis la même erreur que moi: définir le paramètre scope
surApplication
. Ces types de paramètres sontpas enregistrés .
Réglez-le surUser
pour résoudre le problème.
rene est correct - vous devez appeler Default.Reload
après avoir appelé la méthode Save
:
Settings.Default.Save();
Settings.Default.Reload();
Peut-être un bug -?
Poster en réponse pour augmenter la visibilité -
Après une journée complète de recherche et d'étude sur le sujet, j'ai pu résoudre ce problème en mettant la configuration à la disposition de l'utilisateur:
Using System.Configuration;
Properties.Settings.Default.strinconn = txt_stringconn.Text;
Properties.Settings.Default.Save ();
Properties.Settings.Default.Upgrade ();
MessageBox.Show ("Saved Settings");
Application.Restart ();
Attention à ne pas appeler
Settings.Default.Reload();
après chacun
Settings.Default.Save();
La fonction Save () enregistre vos modifications dans le fichier mais n’est pas reflétée dans votre code en cours d’exécution. Ainsi, votre code conserve la copie de la version précédente du fichier.
Lorsque vous appelez Save () à un autre emplacement dans votre code, il enregistre votre première modification, rétablissant ainsi votre première modification sur sa valeur d'origine . Très difficile à cerner, même lors du débogage.
Si votre fichier AssemblyInfo.cs
a un *
dans la version d'assemblage, il est actualisé à chaque génération afin que vous ne voyiez plus la persistance ou la fiabilité tant que vous n'avez pas changé ce nombre et que vous avez tout reconstruit, puis tout retesté.
Si vous avez besoin de tester votre application, comment travailler réellement dans ce cas, il est préférable de lancer le fichier exe. Lorsque vous exécutez Visual Studio en mode débogage, l'enregistrement de ces paramètres prend un certain temps. Allez dans le dossier de débogage et exécutez le fichier exe, vous obtiendrez les messages comme prévu.
S'il vous plaît jeter un oeil à cette question
Surtout, essayez le code suivant à partir d'une réponse:
using System.Configuration; // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
En outre, consultez cet aperçu , peut-être avez-vous rencontré une limitation qui n’est pas facile à identifier à partir de votre question.
Cet article codeproject pourrait être utile.
avez-vous essayé d'appeler ConfigurationManager.RefreshSection
avant de vérifier qu'il avait été enregistré, vous pouvez le réessayer après le rechargement