【问题标题】:WinForm Settings are not savedWinForm 设置未保存
【发布时间】:2014-04-12 09:35:45
【问题描述】:

我使用 VSTO 内置设置文件来保存 Windows 应用程序设置。

我的 WinForm 上有一个复选框,而在加载表单时我读取了它的状态(选中或未选中) 来自设置文件中的相应属性。

只要我不退出应用程序,它就可以正常工作。
但是,当我退出然后再次执行应用程序时 - 设置不会从上次执行中保存,并且复选框状态不是最后的首选项。

我使用“用户”范围来保存设置。

在表单加载时,从设置中提取复选框状态。

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

【问题讨论】:

    标签: c# winforms settings


    【解决方案1】:

    我不认为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();
    

    编辑:最初,您将复选框状态存储在设置属性的DefaultValue 属性中。 DefaultValue 旨在提供一个默认值,如果在存储的设置中未找到任何设置值,则会返回该默认值。它不是一个将与设置一起存储的值,因为它不应该是用户定义的,也不应该在应用程序运行期间更改。

    因此,您之前的尝试导致了观察到的行为:您可以为DefaultValue 分配一个值,只要应用程序处于活动状态,该值就会一直存在,但该值不会存储在P_Settings.Settings.Default.Save() 上或恢复到应用程序启动,因此在下次启动应用程序时,DefaultValue 将再次使用其默认值(可能是 null)。

    【讨论】:

    • 非常感谢!这完美!您能否添加一些进一步的解释,以便我也可以理解为什么原始代码不起作用。提前致谢!
    • @user3165438:我添加了对我认为发生的事情的额外解释。
    • 真的有道理!非常感谢!
    猜你喜欢
    • 2014-09-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多