Как получить текущее значение настройки свойства во время выполнения, используя цикл - PullRequest
2 голосов
/ 07 февраля 2020

У меня есть свойство с именем A, и оно было установлено на значение AAA через окно настройки свойств в Visual Studio (Проект → Свойства → Настройки).

Я могу получить исходное значение для свойства A, используя это l oop.
Если я изменю значение, скажем NewValue, я могу получить новое значение с помощью кода:

Properties.Settings.Default.A

Однако в пределах l oop я не знаю, как получить текущее значение свойства без использования синтаксиса:

Properties.Settings.Default.VariableName

, например:

Properties.Settings.Default.A= "NewValue";
Properties.Settings.Default.Save();
foreach (SettingsProperty _currentProperty in Properties.Settings.Default.Properties)
{
    Console.WriteLine(_currentProperty.Name + "," + _currentProperty.DefaultValue.ToString());
}

Приведенный выше l oop показывает исходное значение свойства (старое значение по умолчанию, которое было AAA).

Я проверил файл user.config и убедился, что он показывает NewValue.

Я предполагаю, что должен быть какой-то способ ссылки на текущее значение с помощью свойства или метода, которого я не знаю (может быть, мне следует повторить другую коллекцию?).

Вопрос в том, как отобразить это новое значение внутри foreach l oop выше?

1 Ответ

3 голосов
/ 07 февраля 2020

Текущие значения Properties.Settings возвращаются в SettingsPropertyValueCollection Класс при запросе SettingsProvider (если для параметра не определен поставщик, поставщик по умолчанию, LocalFileSettingsProvider , используется).

Текущий код изменяет значение параметра, а затем проверяет эти значения после сохранения настроек в локальном хранилище.
Код повторяет коллекцию Properties.Settings.Default.Properties, соответствующую Свойство ApplicationSettingsBase.Properties , коллекция SettingsPropertyCollection , которая содержит SettingsProperty объекты, используемые внутри для представления метаданных свойств конфигурации.

Этот класс может возвращать только значение по умолчанию соответствующего параметра.

Для проверки текущих значений, связанных с настройками свойств, код должен вместо этого выполнить итерацию вышеупомянутого SettingsPropertyValueCollection, возвращаемого свойством ApplicationSettingsBase.PropertyValues ​​, которое перечисляет объекты SettingsPropertyValue.
Свойство PropertyValue этих объектов возвращает значение времени выполнения, назначенное в данный момент параметру.

Чтобы вернуть текущие значения, код можно изменить в:

foreach (SettingsPropertyValue prop in Properties.Settings.Default.PropertyValues) {
    Console.WriteLine($"{prop.Name} -> {prop.PropertyValue}");
}

Пара замечаний о настройках приложения:

Настройки приложения организованы в 2 основные категории:

  1. Настройки приложения (настройки в области Application)
    Только для чтения, локальное хранилище не связано , поэтому не может быть изменено во время выполнения. Эти настройки хранятся в файлах app.config, которые копируются в файл [Application].exe.config при создании проекта.
  2. Настройки пользователя (Настройки в области User) (применимо к Visual Studio 2017 +)
    Эти настройки хранятся вместе с настройками приложения, но имеют связанные локальные файлы хранения, используемые для хранения значений, которые пользователь (или Приложение) может измениться во время выполнения:
    2,1 A user.config файл, сохраненный в текущем профиле пользователя в
    [User]/AppData/Local/[CompanyName]/[ProductName].exe_<hash>/[Assembly Version]
    раздел, если для атрибута Roaming задано значение false.
    2.2 A user.config Файл, сохраненный в текущем профиле пользователя в
    [User]/AppData/Roaming/[CompanyName]/[ProductName]/[File Version]
    , если вместо атрибута Roaming установлено значение true.

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


  • Настройки в пользовательской области позволяют сохранять новые значения, назначенные во время выполнения, используя ApplicationSettingsBase.Save () метод:

    Properties.Settings.Default.Save();
    
  • Приложение может перезагрузить последние сохраненные значения (возможно, чтобы отменить последние изменения) с помощью ApplicationSettingsBase.Reload () метод:

     Properties.Settings.Default.Reload();
    
  • Чтобы отменить все изменения, внесенные в пользовательские настройки, настройки можно сбросить до значений по умолчанию, используя ApplicationSettingsBase.Reset () метод:

     Properties.Settings.Default.Reset();
    
...