c # Properties.Settings.Default Не работает должным образом - PullRequest
2 голосов
/ 16 мая 2010

Я работал над программой для автоматизации моих проверок резервного копирования с помощью резервного копирования LogMeIn (программа на основе форм Windows). Теперь мне нужен способ хранения пользовательских настроек, чтобы легко сохранять информацию. Я никогда не работал с настройками приложения / пользователя, которые несколько «встроены» - и решил попробовать, но столкнулся с проблемами.

На данный момент я добавил четыре параметра: IncludeCriteria (Specialized.StringCollection) ExcludeCriteria (Specialized.StringCollection) ReportPath (строка) ReportType (int)

Но поведение не действует, как ожидалось (см. Рисунок). После сохранения некоторых значений в моей программе я возвращаюсь к редактированию / просмотру значений моих настроек с помощью редактора настроек VS 2008. Ни одно из моих значений не сохранено. Хотя я думаю, что это может быть из-за того, что эти значения являются просто значениями по умолчанию, разве это не было бы, где они могут быть сохранены / прочитаны / изменены?

Вот мой код формы загрузки (все еще очень неопределенный):

private void setupForm()
    {
        txtPath.Text = BackupReport.Properties.Settings.Default.ReportPath == null ? "" : BackupReport.Properties.Settings.Default.ReportPath;

        if (BackupReport.Properties.Settings.Default.ReportType == 0)
        {
            radioHTML.Checked = true;
        }
        else
            radioExcel.Checked = true;

        if (BackupReport.Properties.Settings.Default.IncludeCriteria.Count > 0)
        {
            listIncludeCriteria.DataSource = Properties.Settings.Default.IncludeCriteria;


            //foreach (string s in Properties.Settings.Default.IncludeCriteria)
            //    listIncludeCriteria.Items.Add(s);
        }

        if (BackupReport.Properties.Settings.Default.ExcludeCriteria.Count > 0)
        {
            listExcludeCriteria.DataSource = BackupReport.Properties.Settings.Default.ExcludeCriteria;

            //foreach (string s in Properties.Settings.Default.ExcludeCriteria)
            //    listExcludeCriteria.Items.Add(s);
        }





    }

listIncludeCriteria - это просто список. Когда пользователь сохраняет, я вызываю этот метод:

private void saveSettings()
    {
        //var settings =  BackupReport.Properties.Settings;
        if (txtPath.Text != "")
        {
            BackupReport.Properties.Settings.Default.ReportPath = txtPath.Text;

        }

        if (listIncludeCriteria.Items.Count > 0)
        {
            //BackupReport.Properties.Settings.Default.IncludeCriteria = (StringCollection)listIncludeCriteria.Items.AsQueryable();


            foreach (var i in listIncludeCriteria.Items)
            {
                if (!isIncludeDuplicate(i.ToString()))
                    BackupReport.Properties.Settings.Default.IncludeCriteria.Add(i.ToString());
            }

        }

        if (listExcludeCriteria.Items.Count > 0)
        {

            //BackupReport.Properties.Settings.Default.ExcludeCriteria = (StringCollection)listExcludeCriteria.Items.AsQueryable();

            foreach (var i in listExcludeCriteria.Items)
            {
                if (!isExcludeDuplicate(i.ToString()))
                    Properties.Settings.Default.ExcludeCriteria.Add(i.ToString());
            }

        }

        if (radioExcel.Checked == true)
            BackupReport.Properties.Settings.Default.ReportType = 1;
        else
            BackupReport.Properties.Settings.Default.ReportType = 0;


        BackupReport.Properties.Settings.Default.Save();
        //Properties.Settings.Default.Save();
        this.DialogResult = DialogResult.OK;
        this.Close();



    }

Странно то, что когда форма загружается, путь, который я указал в первый раз, кажется, подходит (ReportPath) - даже списки заполнены кучей дерьма, которое я вставил, - но я не могу найти эти значения где-либо.

Буду признателен за любую помощь!

Josh

1 Ответ

4 голосов
/ 16 мая 2010

Вы должны сохранить после редактирования / добавления

Settings.Default.Save();

Простой пример, который я использую много

private void Main_Load(object sender, EventArgs e)
{
    this.Location = Settings.Default.WindowLocation;
}

private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
    Settings.Default.WindowLocation = this.Location;
    Settings.Default.Save();
}
...