c#Properties.Settings.Default 不能按预期工作

Posted

技术标签:

【中文标题】c#Properties.Settings.Default 不能按预期工作【英文标题】:c# Properties.Settings.Default Doesn't work as expected 【发布时间】:2011-02-20 00:10:38 【问题描述】:

我一直在开发一个程序,以使用 LogMeIn 备份(基于 Windows 窗体的程序)自动执行备份检查。我现在需要一种方法来存储用户设置,以便轻松保存信息。我从未使用过有点“内置”的应用程序/用户设置 - 并决定尝试它,但遇到了问题。

我现在添加了四个设置: IncludeCriteria (Specialized.StringCollection) ExcludeCriteria (Specialized.StringCollection) 报告路径(字符串) 报告类型(整数)

但是行为并没有像预期的那样运行(看图)。在我的程序中保存一些值后,我使用 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)——即使是列表框也充满了我输入的一堆废话——但我无法在任何地方找到这些值。

任何帮助将不胜感激!

乔什

【问题讨论】:

这个答案说明了一切***.com/questions/1804302/… 【参考方案1】:

编辑/添加后必须保存

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();

【讨论】:

好吧,我的 saveForm() 方法中确实有 .Save() (BackupReport.Properties.Settings.Default.Save();) - 但我知道我的问题是什么。我最终使用了 BindingSource,将我的列表框绑定到我的属性列表,并让它正确保存。谢谢! @BrunoLM 这不是答案。 @Jack 你能解释一下你是如何解决这个问题的吗?谢谢

以上是关于c#Properties.Settings.Default 不能按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

C/C++ ceil 函数

C/C++ floor 函数

C语言数组问题?

关于c++/c

C语言 extern “C”

使用 MetroWerks C/C++ 开发的 C/C++ 资源