Постоянные пользовательские настройки

Я пытаюсь сохранить пользовательские настройки на C# и повторно использовать их в следующем сеансе.

Повсюду в сети можно найти такие чаевые: Как программно сохранить пользовательские настройки?

В моем проекте есть файл .setting с настройками по умолчанию.

Когда пользователь меняет настройку, я вызываю save, и в %APPDATA% появляется файл с пользовательскими настройками. Это выглядит так:

private void SetSetting(string prop, Object val)
{
    try
    {
        string strval = String.Format("G{0}_{1}", Group_Id, prop);
        Properties.Last.Default[strval] = val;
    }
    catch
    {
        System.Configuration.SettingsProperty property = new System.Configuration.SettingsProperty(String.Format("G{0}_{1}", Group_Id, prop));
        property.PropertyType = Properties.Def.Default[String.Format("G0_{1}", Group_Id, prop)].GetType();
        property.DefaultValue = Properties.Def.Default[String.Format("G0_{1}", Group_Id, prop)];
        property.PropertyType = val.GetType();
        property.Provider = Properties.Last.Default.Providers["LocalFileSettingsProvider"];
        property.Attributes.Add(typeof(System.Configuration.UserScopedSettingAttribute), new System.Configuration.UserScopedSettingAttribute());
        Properties.Last.Default.Properties.Add(property);
        Properties.Last.Default.Reload();
        string strval = String.Format("G{0}_{1}", Group_Id, prop);
        Properties.Last.Default[strval] = val;
    }
    Properties.Last.Default.Save();
}

Как видите, у меня есть экземпляр настроек Last как в «настройках из последнего сеанса» и Def как по умолчанию.

По сути, пользователь может добавлять и удалять группы по своему желанию в приложении. Def содержит конфигурацию по умолчанию для новой группы. Last должен содержать количество групп в последнем пользовательском сеансе, а также свойства каждой группы. Таким образом, форматирование с помощью Group_Id и так далее.

Итак, как я уже сказал. Во время выполнения все в порядке. Пользовательские настройки правильно записаны в файл на %APPDATA% и все такое.

Файл такой:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5629387e089" >
            <section name="Project1.Properties.Last" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5629387e089" " allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <Project1.Properties.Last>
            <setting name="G1_do_cut" serializeAs="String">
                <value>True</value>
            </setting>
        </Project1.Properties.Last>
    </userSettings>
</configuration>

Итак, настройка для do_cut для группы 1 сохраняется как G1_do_cut.

Но как только я перезапускаю приложение, пользовательские настройки игнорируются. Используемый код:

private Object GetSetting(string prop)
{
    try { return Properties.Last.Default[String.Format("G{0}_{1}", Group_Id, prop)]; }
    catch { return Properties.Def.Default[String.Format("G0_{1}", Group_Id, prop)]; }
}

и в попытке выдается исключение G1_do_cut is not found in settings, и catch загружает значение по умолчанию.

Во время сеанса пользователя GetSettings работает правильно - если я пытаюсь прочитать G1_do_cut после того, как он был установлен, исключение не генерируется, и я получаю правильное значение.

Как заставить C# повторно использовать настройки после перезапуска приложения?

В строке 5 также есть лишняя двойная кавычка.

KSib 10.09.2018 21:19

Простите, что / где вы имеете в виду?

user3696412 11.09.2018 08:09
0
2
113
0

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