使用C#在Windows Forms上保存简单的用户偏好设置

7

我正在使用 VS 2010C# 编写我的第一个 Windows Forms 应用程序。它不使用数据库,但我想保存用户设置,比如目录路径和选中的复选框。最简单的方法是什么?


5个回答

9

我建议您使用内置应用程序设置来完成此操作。这篇文章讲解了它的用法。

使用示例:

MyProject.Properties.Settings.Default.MyProperty = "Something";

7

您可以与“设置”类结合使用可序列化属性。对于少量信息,这确实是最佳选择,因为它易于实现。例如:

  [Serializable]
  public class MySettings  
  {
    public const string Extension = ".testInfo";

    [XmlElement]
    public string GUID { get; set; }

    [XmlElement]
    public bool TurnedOn { get; set; }

    [XmlElement]
    public DateTime StartTime { get; set; }

    public void Save(string filePath)
    {
      XmlSerializer serializer = new XmlSerializer(typeof(MySettings));
      TextWriter textWriter = new StreamWriter(filePath);
      serializer.Serialize(textWriter, this);
      textWriter.Close();
    }

    public static MySettings Load(string filePath)
    {
      XmlSerializer serializer = new XmlSerializer(typeof(MySettings));
      TextReader reader = new StreamReader(filePath);
      MySettings data = (MySettings)serializer.Deserialize(reader);
      reader.Close();

      return data;
    }
  }

这就是你需要的代码。你可以直接将其复制粘贴到你的代码中。只需根据需要添加属性,并不要忘记在你感兴趣的属性上加上[XMLElement]属性,以使内容更加通俗易懂。

这种设计的另一个好处是,你不必费力地使用Application.Settings方法,并且如果需要,你可以手动修改文件。


这是一个非常好的答案。 它在保持代码优雅的同时允许您拥有更多的自由。 缺少的是检查返回属性是否为空和有效的逻辑。如果您获取到损坏的设置.xml文件,这种情况可能会发生。 - Vladimir
@Vladimir 谢谢夸奖。我想可以在Load()函数中添加检查逻辑和合理的默认值。损坏的文件是一个棘手的问题,所以处理它们的代码量可能会很大。 - A.R.

2
我会将设置保存在XML文件中。这样用户就可以轻松地在不同设备之间共享他们的设置。
同时,您还可以将XML反序列化为应用程序中的类,从而轻松访问所需的设置。

2

最简单的方法是在app.config设置中进行。您可以在设计师下的项目属性设置中设置它们(确保将它们设置为用户设置而不是应用程序设置,否则您将无法保存它们),然后使用C#读取和写入它们。

要读取和写入,请访问属性。

Properties.Settings.Default.<your property>

还有一些方法可以将属性保存到用户配置文件中或重置为默认值

Properties.Settings.Default.Reset();
Properties.Settings.Default.Save();

http://msdn.microsoft.com/en-us/library/a65txexh.aspx


0

你可以考虑向项目中添加一个本地数据集(然后创建一个设置表),最后将数据导出到xml文件中,这样更容易使用和更灵活。

enter image description here

1- 在设计器中向本地表(DataTable1)添加列(例如:settingName 和 settingValue),然后

//data set
 DataSet1 ds = new DataSet1();
 DataSet1.DataTable1DataTable settingsTable = (DataSet1.DataTable1DataTable)ds.Tables[0];
 //add new setting 
 settingsTable.Rows.Add(new string[] { "setting1", "settingvalue1" });
 //export to xml file
 settingsTable.WriteXml("settings.xml");

 //if you want to read ur settings back... read from xml
 settingsTable.ReadXml("settings.xml");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接