WinForm设置不会保存

时间:2014-03-09 09:31:13

标签: c# winforms settings

我使用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();
   }

1 个答案:

答案 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)。