Почему это не Свойства.Настройки.Сохраняется значение по умолчанию?

StackOverflow https://stackoverflow.com/questions/2131542

Вопрос

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

Почему мои настройки не сохраняются?В первый раз, когда я запускаю это, у меня есть 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();
    }
Это было полезно?

Решение

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

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; }
    }

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

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

    var saveData = MyApp.Properties.Settings.Default;
    saveData["user"] = textBox1.Text;
    saveData["pass"] = textBox2.Text;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top