Почему это не Свойства.Настройки.Сохраняется значение по умолчанию?
-
22-09-2019 - |
Вопрос
Я написал это, чтобы быстро протестировать
Почему мои настройки не сохраняются?В первый раз, когда я запускаю это, у меня есть 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;