Каков наилучший способ реализации диалогового окна «Параметры программы» с возможностью «Сбросить по умолчанию» в C # (версия 2005)?
Ниже описан способ, которым я занимаюсь.
- Создайте диалоговую форму и добавьте в нее некоторые элементы управления (например, флажки).Также добавьте три кнопки: Ok, Cancel, Default.
- Создать файл настроек и добавить некоторые поля в пользовательскую область.
- Привязать элементы управления диалогового окна к соответствующим полям настроек через «Настройки приложения»свойства в диалоговом окне свойств Visual Studio.
Добавьте некоторый код в форму владельца:
if (myDialog.ShowDialog (this) == DialogResult.OK)
{
MySettings.Default.Save ();
}
else
{
MySettings.Default.Reload ();
}
Добавитьследующая строка в событии DefaultButtonClick в диалоговой форме:
MySettings.Default.Reset ();
Примечание: Сохранить(), Reload (), Reset () являются общими функциями .Net класса ApplicationSettingsBase.Подробное объяснение по этому поводу можно посмотреть по адресу http://www.codeproject.com/KB/dotnet/user_settings.aspx (спасибо BillW за ссылку).
Этот код работает отлично, сохраните и восстановите пользовательские настройки без проблем, , но Функциональность «Сброс настроек по умолчанию» отличается от того, что я вижу во многих популярных программах.В моей реализации «Сброс» не может быть отменен (поскольку Settings.Default.Reset () не может быть возвращен обратно), однако, если вы видите диалоговое окно параметров какой-либо популярной программы (например, «Параметры папки» в проводнике Windows), выполните сбросможно отменить, нажав кнопку Отмена.
Итак, каков наилучший и простой способ реализации «традиционного» способа «сброса»?
Обновление (и, возможно,лучший ответ)
В настоящее время я решил проблему следующим образом.Вместо
MySettings.Default.Reset();
, который не может быть возвращен обратно, я читаю значения по умолчанию прямо так:
MySettings.Default.MyBoolValue = bool.Parse((string)MySettings.Default.Properties["MyBoolValue "].DefaultValue);
Теперь все работает так, как я хотел, но на самом деле я чувствую этокод должен быть немного грязным, потому что мне нужно сделать это для каждой переменной в отдельности, выполнить преобразование типов и так далее.Если кто-то знает лучшее простое решение, пожалуйста, напишите здесь.