我需要非常简单的代码:
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();
}
}
所以,为了测试我的代码,我添加了值“Foo; Bar” 到VS Designer中的Settings.Settings 但是当我运行代码时,什么都没有出现。所以我添加了这段代码:
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和Searched整个解决方案中查找值Employee1无效。
我的最终结果是我想发送一个带有可编辑组合框的应用程序,无需重新编译即可保存和编辑。
答案 0 :(得分:2)
在运行时更改此类设置时,值将存储在以下目录中:
C:\Documents and Settings\<username>\Local Settings\Application Data
这就是应用程序的用武之地,并在下次查找它们。
答案 1 :(得分:0)
每次构建都会覆盖您在VS中设置的任何设置。如果要使用先前编译中的设置(或一旦部署到客户端计算机,更新后的先前版本),则必须使用Settings.Upgrade()。这应该在每个运行时调用一次,最容易在构造函数中调用。请参阅此其他StackOverflow问题。 C# .NET Application Settings and Upgrading