Вопрос

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

Например:

  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?

Это было полезно?

Решение

@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"

Другие советы

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

База настроек приложений.Перезагрузить

База настроек приложений.Сброс

Из MSDN:

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

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

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

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

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");

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

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

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

Как мне вернуться к цвету.Белый?

Есть два способа, которыми вы можете это сделать:

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

Я нашел это призвание 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);
            }
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top