为什么ApplicationSettingsBase.Reset()清空PropertyValues?

时间:2009-10-28 00:34:50

标签: c# default-value reset applicationsettingsbase

我认为Reset()方法再次使用默认值重新填充设置,但似乎没有。如何使用默认值重新加载它们?

  private void buttonLoadDefaultSettings_Click(object sender, EventArgs e)
  {
   FooSettings.Default.Reset();

   // Data grid will show an empty grid after call to reset.
   DataGridFoo.Rows.Clear();
   foreach (SettingsPropertyValue spv in FooSettings.Default.PropertyValues)
   {
    DataGridFoo.Rows.Add(spv.Name, spv.PropertyValue);
   }
  }

更新

private void buttonLoadDefaultSettings_Click(object sender, EventArgs e)
  {
   foreach (SettingsProperty sp in FooSettings.Default.Properties)
   {
    FooSettings.Default[sp.Name.ToString()] = sp.DefaultValue;
   }

   DataGridFoo.Rows.Clear();
   foreach (SettingsPropertyValue spv in FooSettings.Default.PropertyValues)
   {
    DataGridFoo.Rows.Add(spv.Name, spv.PropertyValue);
   }
  }

删除对Reset()的调用,并手动将属性值设置为默认存储值。我仍然渴望听到这是应该使用的方式还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

我遇到了这个帖子,因为我遇到了同样的问题。我想我会为未来可能会来这里的旅行者报告我的发现。我不能保证这是100%准确或完整的'因为我已经摆弄了一个小时,即使我觉得还有更多要知道的东西已经足够一天了。但至少他们在这里会有一些提示。 :)

虽然Reset()的文档似乎表明使用app.config文件中的默认值在user.config文件中覆盖了已保存的设置,但似乎并非如此。它只是从user.config文件中删除设置,使用上面的示例,FooSettings.Default.PropertyValues计数为0,因为在使用Reset()后不存在。但是有一些方法可以使用这个结果,而不必像OP那样重新设置设置。一种方法是显式检索单个设置值,如下所示:

// This always returns the value for TestSetting, first checking if an
// appropriate value exists in a user.config file, and if not, it uses 
// the default value in the app.config file.
FormsApp.Properties.Settings.Default.TestSetting;

其他方式涉及使用SettingsPropertyValueCollection和/或SettingsPropertyCollection

// Each SettingsProperty in props has a corresponding DefaultValue property
// which returns (surprise!) the default value from the app.config file.
SettingsPropertyCollection props = FormsApp.Properties.Settings.Default.Properties;

// Each SettingsPropertyValue in propVals has a corresponding PropertyValue
// property which returns the value in the user.config file, if one exists.
SettingsPropertyValueCollection propVals = FormsApp.Properties.Settings.Default.PropertyValues;

所以,回到最初的问题,你可以做的是:

private void buttonLoadDefaultSettings_Click(object sender, EventArgs e)
{
    FooSettings.Default.Reset();
    DataGridFoo.Rows.Clear();

    // Use the default values since we know that the user settings 
    // were just reset.
    foreach (SettingsProperty sp in FooSettings.Default.Properties)
    {
        DataGridFoo.Rows.Add(sp.Name, sp.DefaultValue);
    }
}