Подтвердить что ты не робот

Чтение настроек приложения по умолчанию в С#

У меня есть ряд настроек приложения (в области пользователя) для моего настраиваемого элемента управления сеткой. Большинство из них - настройки цвета. У меня есть форма, в которой пользователь может настроить эти цвета, и я хочу добавить кнопку для возврата к настройкам цвета по умолчанию. Как я могу прочитать настройки по умолчанию?

Например:

  • У меня есть пользовательский параметр с именем CellBackgroundColor в Properties.Settings.
  • Во время разработки я устанавливаю значение CellBackgroundColor в Color.White с помощью IDE.
  • Пользователь устанавливает CellBackgroundColor в Color.Black в моей программе.
  • Я сохраняю настройки с помощью Properties.Settings.Default.Save().
  • Пользователь нажимает кнопку Restore Default Colors.

Теперь Properties.Settings.Default.CellBackgroundColor возвращает Color.Black. Как вернуться к Color.White?

4b9b3361

Ответ 1

@ozgur,

Settings.Default.Properties["property"].DefaultValue // initial value from config file

Пример:

string foo = Settings.Default.Foo; // Foo = "Foo" by default
Settings.Default.Foo = "Boo";
Settings.Default.Save();
string modifiedValue = Settings.Default.Foo; // modifiedValue = "Boo"
string originalValue = Settings.Default.Properties["Foo"].DefaultValue as string; // originalValue = "Foo"

Ответ 2

Чтение "Программирование форм Windows 2.0", я наткнулся на эти два полезных метода, которые могут помочь в этом контексте:

ApplicationSettingsBase.Reload

ApplicationSettingsBase.Reset

Из MSDN:

Перезагрузите контрасты с Reset в этом первый будет загружать последний набор сохраненные значения параметров приложения, тогда как последний будет загружать сохраненные значения по умолчанию.

Таким образом, использование будет:

Properties.Settings.Default.Reset()
Properties.Settings.Default.Reload()

Ответ 3

Я не уверен, что это необходимо, должен быть более аккуратный способ, иначе надеюсь, что кто-то найдет это полезным;

public static class SettingsPropertyCollectionExtensions
{
    public static T GetDefault<T>(this SettingsPropertyCollection me, string property)
    {
        string val_string = (string)Settings.Default.Properties[property].DefaultValue;

        return (T)Convert.ChangeType(val_string, typeof(T));
    }
}

использование;

var setting = Settings.Default.Properties.GetDefault<double>("MySetting");

Ответ 4

Properties.Settings.Default.Reset() установит reset все настройки в исходное значение.

Ответ 5

Как вернуться к Color.White?

Два способа сделать:

  • Сохраните копию настроек до того, как пользователь изменит ее.
  • Загрузите пользовательские измененные настройки и сохраните их в свойствах. Установки перед закрытием приложения.

Ответ 6

Я обошел эту проблему, имея 2 набора настроек. Я использую тот, который Visual Studio добавляет по умолчанию для текущих настроек, т.е. Properties.Settings.Default. Но я также добавлю еще один файл настроек в свой проект "Проект → Добавить новый элемент → Общие → Файл настроек" и сохраните в нем фактические значения по умолчанию, т.е. Properties.DefaultSettings.Default.

Затем я убеждаюсь, что я никогда не пишу настройки Properties.DefaultSettings.Default, просто прочитаю из него. Все изменения обратно к значениям по умолчанию - это всего лишь случай, когда текущие значения вернутся к значениям по умолчанию.

Ответ 7

Я обнаружил, что вызов ApplicationSettingsBase.Reset приведет к сбросу настроек к их значениям по умолчанию, но также сохранению их в одно и то же время.

Поведение, которое я хотел, было reset для них по умолчанию, но не для их сохранения (так что если пользователю не нравились значения по умолчанию, пока они не были сохранены, они могли бы вернуть их обратно).

Я написал метод расширения, подходящий для моих целей:

using System;
using System.Configuration;

namespace YourApplication.Extensions
{
    public static class ExtensionsApplicationSettingsBase
    {
        public static void LoadDefaults(this ApplicationSettingsBase that)
        {
            foreach (SettingsProperty settingsProperty in that.Properties)
            {
                that[settingsProperty.Name] =
                    Convert.ChangeType(settingsProperty.DefaultValue,
                                       settingsProperty.PropertyType);
            }
        }
    }
}