我有一个利用“设置”的Windows应用程序。我有一些用户可以手动设置的用户设置,它们被设置为用户范围。 save方法工作正常,但是如果关闭应用程序然后重新打开,则将值设置回默认值。
这是我要保存的代码的一个示例:
Properties.Settings.Default["LocalDefaultPrinter"] = Default_Printer;
Properties.Settings.Default.Save();
可能是什么问题?
答案 0 :(得分:3)
我不确定这是不是问题,但我习惯使用设计器生成的属性来做这件事:
Properties.Settings.Default.LocalDefaultPrinter = Default_Printer;
Properties.Settings.Default.Save();
编辑:嗯,这不是问题 - 如果设置为“用户”作用域,我可以使用您的方法保存。但是,如果将其范围设置为“应用程序”,则无法保存该值,因为它存储在application.config文件中(应用程序属性不会保存回.Save上的该文件)。
答案 1 :(得分:2)
以编程方式更改用户设置时,您不会更改应用程序配置文件。您正在更改用户配置文件中那些在运行时与应用程序配置合并的设置的副本。
您是否检查过用户的个人资料文件夹中是否有更改过的设置?他们在吗?如果是这样,您的代码运行正常。
感谢。 -Jason
答案 2 :(得分:2)
除了这些可能性之外,请了解用户设置的范围是可执行文件的版本号。因此,如果您在调试期间自动增加构建或更改构建号,则将丢失先前版本的应用程序已更新的任何设置。
答案 3 :(得分:2)
对于任何在WPF中遇到问题的人。
如果要使用保存的设置,请调用Settings.Default.Upgrade()
以检索非默认值。
答案 4 :(得分:1)
没关系所有人。我忘了我在代码中有一个检查用户设置打印机是否与系统设置打印机相同的方法,如果没有,则将其更改为系统打印机。采取这种方法,一切都很好。
答案 5 :(得分:0)
应用程序作用域设置是只读的,而用户作用域设置是读/写。调用Save()
将在应用程序会话之间保留用户范围设置。如果LocalDefaultPrinter
是应用程序作用域,则不会在会话之间保持不变。
This post提供有关如何完整使用这些设置的信息。
答案 6 :(得分:0)
我刚刚在用户设置中遇到了一个类似的问题。 为了解决这个问题,我尝试删除密钥并将其添加回来。最后的解决方案,我添加了一个新的密钥,它有一个新的名称。愚蠢的解决方案,但它的工作。