Я наткнулся на эту тему, потому что столкнулся с той же проблемой. Я решил, что сообщу о своих находках всем будущим путешественникам, которые могут пройти этим путем. Я не могу обещать, что это на 100% точно или полно, потому что я возился с этим в течение часа, и этого достаточно для одного дня, хотя я чувствую, что мне еще многое предстоит узнать. Но, по крайней мере, они будут некоторые советы здесь. :)
Хотя документация для Reset()
указывает, что сохраненные настройки в файле user.config перезаписываются значениями по умолчанию из файла app.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);
}
}
person
Nick Spreitzer
schedule
22.04.2010
PropertyValues
не заполняется при инициализации, а вместо этого откладывается до тех пор, пока вы сначала не получите какое-либо значение свойства. Сброс объекта настроек сбрасывает все, включая начальное состояние 0-элементаPropertyValues
. См. отмеченный дубликат. - person Peter Duniho   schedule 01.08.2019