Почему не сохраняется Properties.Settings.Default? - PullRequest
2 голосов
/ 25 января 2010

Я написал это, чтобы быстро проверить

Почему мои настройки не сохраняются? При первом запуске я имею 3 (старых) / 3 (текущих) элемента. Второй раз я получаю 3 (старый) / 5 (текущий), третий раз 5 (старый) / 5 (текущий).

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

    private void button2_Click(object sender, EventArgs e)
    {
        MyApp.Properties.Settings.Default.Reload();
        var saveDataold = MyApp.Properties.Settings.Default.Context;
        var saveData = MyApp.Properties.Settings.Default.Context;
        saveData["user"] = textBox1.Text;
        saveData["pass"] = textBox2.Text;
        MyApp.Properties.Settings.Default.Save();
    }

1 Ответ

4 голосов
/ 25 января 2010

Вы должны использовать открытые свойства вместо того, чтобы поместить ваши данные в контекст:

var saveData = MyApp.Properties.Settings.Default;
saveData.user = textBox1.Text;
saveData.pass = textBox2.Text;

Контекст

предоставляет контекстную информацию, которая поставщик может использовать при сохранении Настройки

и в моем понимании не используется для хранения фактических значений настроек.

Обновление: если вы не хотите использовать редактор параметров в Visual Studio для создания строго типизированных свойств, вы можете написать его самостоятельно. Код, сгенерированный VS, имеет такую ​​структуру:

    [UserScopedSetting]
    [DebuggerNonUserCode]
    [DefaultSettingValue("")]
    public string SettingName
    {
        get { return ((string)(this["SettingName"])); }
        set { this["SettingName"] = value; }
    }

Вы можете легко добавить дополнительные свойства, отредактировав файл Settings.Designer.cs.

Если вы не хотите использовать свойства со строгим типом, вы можете напрямую использовать индексатор this[name]. Тогда ваш пример будет выглядеть так:

    var saveData = MyApp.Properties.Settings.Default;
    saveData["user"] = textBox1.Text;
    saveData["pass"] = textBox2.Text;
...