我认为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()的调用,并手动将属性值设置为默认存储值。我仍然渴望听到这是应该使用的方式还是我错过了什么?
答案 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);
}
}