Чтение настроек приложения по умолчанию в C # - PullRequest
28 голосов
/ 08 сентября 2008

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

Например:

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

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

Ответы [ 7 ]

37 голосов
/ 08 сентября 2008

@ özgür,

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"
12 голосов
/ 22 января 2010

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

ApplicationSettingsBase.Reload

ApplicationSettingsBase.Reset

Из MSDN:

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

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

Properties.Settings.Default.Reset()
Properties.Settings.Default.Reload()
5 голосов
/ 22 ноября 2011

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

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");
3 голосов
/ 30 января 2010

Properties.Settings.Default.Reset() сбросит все настройки до их первоначального значения.

2 голосов
/ 08 сентября 2008

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

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

1 голос
/ 14 января 2013

Я обнаружил, что вызов ApplicationSettingsBase.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);
            }
        }
    }
}
1 голос
/ 08 сентября 2008

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

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

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