我使用VSTO内置设置文件来保存Windows应用程序设置。
我的WinForm上有一个checkBox,而在表单加载时我读取了它的状态(选中或未选中) 来自设置文件中的相应属性。
只要我不退出应用程序,这样就可以正常工作 但是,当我退出然后再次执行应用程序时 - 设置不会从上次执行中保存,并且checkBox状态不是最后一个首选项。
我使用“user”范围来保存设置。
在表单加载时,从“设置”中提取checkBox状态。
private void MyFormLoad(object sender, EventArgs e)
{
//Find the appropriate property in the Settings file
System.Configuration.SettingsProperty property;
property = P_Settings.Settings.Default.Properties[checkBox.Name];
if (property != null)
checkBox.Checked = Convert.ToBoolean(property.DefaultValue);
}
在表单关闭时,使用表单状态同步设置文件。
private void ButtonApplyClick(object sender, EventArgs e)
{
System.Configuration.SettingsProperty property;
property = P_Settings.Settings.Default.Properties[checkBox.Name];
property.DefaultValue = checkBox.Checked.ToString();
P_Settings.Settings.Default.Save();
}
答案 0 :(得分:2)
我认为DefaultValue
不应该存储设置属性的值。这看起来更像是属性定义的一部分(应该在应用程序运行中保持不变,因此是硬编码的),而不是像设置一样保存的东西。
相反,请尝试直接使用indexer of the settings object:
<强>装载强>
object propValue = P_Settings.Settings.Default[checkBox.Name];
if (propValue != null) {
checkBox.Checked = Convert.ToBoolean(propValue);
}
<强>存储强>
P_Settings.Settings.Default[checkBox.Name] = checkBox.Checked.ToString();
P_Settings.Settings.Default.Save();
编辑:最初,您将复选框状态存储在settings属性的DefaultValue
属性中。 DefaultValue
旨在提供默认值,如果在存储的设置中未找到设置值,则会返回该默认值。 不将与设置一起存储的值,因为它不应该是用户定义的,或者在应用程序运行期间更改。
因此,您之前尝试过的操作会导致观察到的行为:您可以为DefaultValue
分配一个值,只要应用程序处于活动状态,该值就会保留,但该值不会存储在{{1}上或者在应用程序启动时恢复,因此在下次启动应用程序时,P_Settings.Settings.Default.Save()
将再次具有其默认值(可能为DefaultValue
)。