Я наткнулся на эту тему, потому что столкнулся с той же проблемой. Я подумал, что сообщу о своих выводах для любых будущих путешественников, которые могут прийти сюда. Я не могу обещать, что это на 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);
}
}