我有一个简单的程序,可以在应用程序的 Settings.Settings 中保存一些 2 个 int 值。
LoadResults() 在程序启动时调用。
private void LoadResults()
{
nUdVgadano.Value = Properties.Settings.Default.Vgadano;
nUdNeVgadano.Value = Properties.Settings.Default.NotVgadano;
}
private void SaveResults(Object sender, EventArgs e)
{
Properties.Settings.Default.Vgadano = (int)nUdVgadano.Value;
Properties.Settings.Default.NotVgadano = (int)nUdNeVgadano.Value;
Properties.Settings.Default.Save();
//Added Just for tests
LoadResults();
}
奇怪的是第一个值被保存,但第二个拒绝并且在重新启动应用程序后总是加载值 0。
另一个有趣的事实是,如果您在最后添加到 SaveResults() 调用 LoadResults(); -- 那么第二个设置的值不会被重置。
也就是说,由于某种原因,只有在整个应用程序重新启动后才会重置第二个设置。A .Save(); 在整个程序中只从一个地方调用。
试过:
- 清洁线程解决方案
- 逐行调试。
- 删除第二个设置并在其位置创建另一个具有不同名称的设置。
- 尝试编译发布并手动运行
行为完全相同。没有任何帮助。
逻辑上:
如果我在某处犯了错误,它不会存储这两个值......但是为什么使用相同的代码,它会存储一个值而忽略另一个值?=(
为什么它仅在重新启动时重置为零但不重新启动它通常会保存值?
正如所料,结果证明我只是愚蠢:)
关键是在 SaveResults 上,它作为更改 NumericUpDown.Value 的事件挂起。
也就是说,如果我通过更改 NumericUpDown.Value 本身在 LoadResults 中加载了一个新值,则再次调用 SaveResults 方法,这会用零覆盖第二个值。