3

有没有办法在运行时在 Settings.settings 文件中创建新设置?

例如,我想从一个类函数写入设置文件,并从另一个类函数读取该值。不,我不想传递这些值。

  • 我知道如何从 Settings.settings 文件中获取值(值 = Properties.Settings.Default.XXX)
  • 我知道如何更新现有值 (Properties.Settings.Default.XXX = newValue; Properties.Settings.Default.Save())

我想知道如何在运行时将“名称”、“类型”、“范围”和“值”添加到 Settings.settings 文件中。

任何建议,将不胜感激!

谢谢,伊瓦尔

4

1 回答 1

2

问题

我相信 Visual Studio 在您设计应用程序设置和值时会生成代码,因此在运行时,如果没有设计师,这将是不容易的,最坏的情况是不可能的。但是,您有时可以在运行时调用设计功能。

您会注意到代码隐藏具有您在设计器中创建的 C# 属性。例如,我添加了一个设置:

Age [int]  30. 

代码隐藏已生成:

[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("30")]
public int Age {
   get {
       return ((int)(this["Age"]));
   }
   set {
       this["Age"] = value;
   }
}

(代码生成是您拥有强类型设置的原因)

我不确定你是否可以在运行时产生同样的效果。您必须生成代码并将其动态地反馈给 JIT 编译器或类似的东西。或者,在我对设置的有限理解中,也许还有另一种我不知道的方式。

建议/解决方法

我建议找出一种替代/更简单的方法,而不是跳过篮球。例如,设置一个可序列化的集合类型,以便它可以存储多个值。

然后,例如,您可以在一个设置下存储多个年龄:

Ages  [System.Collections.ArrayList]  {add multiple values programatically}

您最终可能会使用 C# 代码来管理它,例如:

System.Collections.ArrayList list = new System.Collections.ArrayList();
list.Add("1");
list.Add("30");
Properties.Settings.Default.Ages = list;
Properties.Settings.Default.Save();
于 2010-06-25T23:57:37.640 回答