2

Я написал это, чтобы быстро протестироватьПочему не сохраняются свойства.Settings.Default?

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

Кстати, почему более половины ваших вопросов без принятого ответа? –

ответ

4

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

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; 
+0

thats ... not great :(. Так что мне нужно создавать свойства в IDE или я могу сделать это в коде каким-то образом? – 2010-01-25 10:32:16

+0

Добавлено обновление, если вы не хотите, чтобы автогенерируемые свойства ... –

+0

To bad я не могу просто пожертвовать вам очки. Отличный ответ. Я заглянул в него, я надеялся, что у меня может получиться NameValueCollection, но он не выглядит возможным. Однако доступна строковая версия. Я думаю, что объекты/бокс не доступны. Если я хочу сгенерировать поля (ATM я просто как писать поля inline и в коде над IDE), я мог бы просто использовать коллекцию строк, которая не является плохим. – 2010-01-25 11:28:08