Файл настроек не корректно работает

234
19 октября 2017, 07:54

Приветствую!

Не могу понять как работает файл настроек. Уже всю голову сломал. Итак, есть WPF приложение с файлом настроек. Он нужен что бы 1 раз при первом запуске показать сообщение с условиями пользования в программе. По умолчанию оно False Если пользователь их принимает то меняется на True если нет то программа просто закрывается и ничего не происходит и так пока пользователь не примет условия. И более при запуске окно показывать не нужно. Файл настроек создаю так : ПКМ по решению => Добавить => Создать элемент => Общие => Файл настроек (Settings1.settings). Добавляю булевское поле DisclaimerAccept со значение False :

Далее при запуске программы :

        if (Settings1.Default.DisclaimerAccept == false)
        {
            Disclaimer disclamer = new Disclaimer();
            disclamer.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            disclamer.ShowDialog();
        }

Далее начинается магия. Когда я запускаю - окна не появляется а во время дебага DisclaimerAccept показывает True! При этом даже в app.config это значение ложь :

<userSettings>
<Myproject.Settings1>
  <setting name="DisclaimerAccept" serializeAs="Binary">
    <value>False</value>
  </setting>
 </Myproject.Settings1>
</userSettings>

UPD Сохранение настроек (если пользователь принял условия)

    private void AcceptDisclaimer_click(object sender, RoutedEventArgs e)
    {
        Settings1.Default.DisclaimerAccept = true;
        Settings1.Default.Save();
        this.Close();  
    }

Не понимаю почему так происходит. Буду рад любой помощи или подсказке.

Answer 1

Вы выбрали "Пользователь", значит настройка будет храниться отдельно для каждого пользователя, и не в файле app.config приложения. Ведь несколько пользователей могут запускать приложение из одной папки, а настройки для них будут разные.

Возможные места, где может находиться файл с настройками:

C:\Documents and Settings\username\Local Settings\Application Data\ApplicationName C:\Users\username\AppData\Local\ApplicationName C:\Users\username\AppData\Roaming\ApplicationName

Соответственно, у вас все работает как надо, однажды вы галочку поставили и больше сообщение не вылазит. Если вы хотите отдельную логику для отладки, рекомендую использовать директиву #if DEBUG

Answer 2

Откройте ваш файл App.xaml.cs и перегрузите метод OnExit(ExitEventArgs e).

Далее добавьте ту да следующий код.

// В режиме дебага будем сбрасывать настройки на по умолчанию как было написано в режиме дизайнера
#if DEBUG
if(Settings1.Default.DisclaimerAccept)
{
    Settings1.Default.DisclaimerAccept = false;
    Settings1.Default.Save();
}
#endif

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

READ ALSO
Поиск индекса в List

Поиск индекса в List

Есть класс:

204
Переопределение методов класса String

Переопределение методов класса String

У переменной типа string есть методыКак я понял эти методы принадлежат классу String

175
Аггрегирование в сервис-контракте WCF

Аггрегирование в сервис-контракте WCF

Можно ли как-то в сервис-контакте WCF, в интерфейсе, описать не методы, а аггрегированные объекты, в которых уже находятся нужные мне методы?...

187