Постоянные пользовательские настройки - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь сохранить пользовательские настройки в 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, а перехватчик загружает значение по умолчанию.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...