0

我认为 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() 的调用,并将属性值手动设置为默认存储的值。我仍然很想知道这是应该使用它的方式还是我错过了什么?

4

1 回答 1

1

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

尽管文档Reset()似乎表明保存的设置在 user.config 文件中被 app.config 文件中的默认值覆盖,但事实并非如此。它只是从 user.config 文件中删除设置,使用上面的示例,导致FooSettings.Default.PropertyValues计数为 0,因为使用 .config 后不存在任何设置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);
    }
}
于 2010-04-22T21:42:35.803 回答