0

我必须非常简单的代码:

    private void frmMain_Load(object sender, EventArgs e)
    {
        string[] EmployeeNames = Settings.Default.Employee_Names.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries);
        employee_NameComboBox.Items.AddRange(EmployeeNames);

    }

    private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
    {
        string Employee_Names = string.Empty;
        foreach (string Name in employee_NameComboBox.Items)
        {
            Employee_Names += Name + ";";
        }
        if (Employee_Names.Length > 1)
        {
            Settings.Default.Employee_Names = Employee_Names.Substring(0, Employee_Names.Length - 1);
            Settings.Default.Save();
        }


    }

因此,为了测试我的代码,我在 VS Designer 中的 Settings.Settings 中添加了值“Foo;Bar”,但是当我运行代码时,什么都没有出现。所以我添加了这段代码:

    private void AddName()
    {
        if (!employee_NameComboBox.Items.Contains(employee_NameComboBox.Text))
        {
            employee_NameComboBox.Items.Add(employee_NameComboBox.Text);
        }
    }

然后我在 employee_NameComboBox 的 Leave 事件中调用它:

    private void employee_NameComboBox_Leave(object sender, EventArgs e)
    {
        AddName();
    }

为了测试这一点,我输入 employee_NameComboBox 并输入“Employee1”并离开 CB,然后再次输入并输入“Employee2”并立即离开,当我单击下拉列表时,我在 Items Collection 中有这些字符串。伟大的!

但是,当我关闭应用程序然后转到解决方案资源管理器中属性下的 settings.settings 时,值“Foo;Bar”仍然存在。

继续再次开始调试,当我单击下拉菜单时,值为“Employee1”和“Employee2”。反过来,我在 Windows 资源管理器中搜索解决方案目录以尝试找到新的设置文件,但我根本找不到任何带有“Employee1”或“Employee2”的文件,我在任何文件中看到的都是“Foo;Bar”。

怎么会这样?我正在保存到某个地方,但是在哪里!

另外为什么调试器不使用 settings.settings 或 App.Config 文件中的值?!?!?!

注意:我还尝试从 Visual Studios 中查找并搜索值 Employee1 的整个解决方案,但无济于事。

我的最终结果是我想发送一个带有可编辑组合框的应用程序,无需重新编译即可保存和编辑。

4

2 回答 2

2

在运行时更改此类设置时,值将存储在以下目录中:

  C:\Documents and Settings\<username>\Local Settings\Application Data

这就是应用程序下次去寻找它们的地方。

于 2013-03-08T17:51:32.150 回答
0

这些设置在每个构建上都会被您在 VS 中设置的任何内容覆盖。如果您想使用以前编译的设置(或者一旦部署到客户端计算机,更新后的以前版本),您必须使用 Settings.Upgrade()。这应该在每个运行时调用一次,最容易在构造函数中调用。请参阅其他 StackOverflow 问题。C# .NET 应用程序设置和升级

于 2013-03-08T17:49:09.233 回答