C# 使用C在Windows窗体上保存简单的用户首选项#

C# 使用C在Windows窗体上保存简单的用户首选项#,c#,winforms,settings,C#,Winforms,Settings,我正在使用VS2010和C#编写我的第一个Windows窗体应用程序。它不使用数据库,但我想保存用户设置,如目录路径和选中的复选框。保存这些首选项的最简单方法是什么?我将设置保存在XML文件中。这样,用户就可以轻松地跨机器等共享他们的设置 您还可以将XML反序列化为应用程序中的一个类,使您能够轻松访问所需的设置。最简单的方法是在app.config设置中,您可以在设计器中的“项目属性设置”下设置该设置(确保您将它们设置为用户设置而不是应用程序设置,否则您将无法保存它们)然后您可以使用C读写它们#

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

我将设置保存在XML文件中。这样,用户就可以轻松地跨机器等共享他们的设置


您还可以将XML反序列化为应用程序中的一个类,使您能够轻松访问所需的设置。

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

要读写,请仅访问上的属性

Properties.Settings.Default.<your property>

我建议您使用内置的应用程序
设置
来实现这一点。一篇关于它的文章

示例用法:

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

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

  [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]属性


这种设计的另一个好处是,您不必费心处理繁琐的应用程序。设置方法,如果需要,您可以手动修改您的文件。

将本地数据集添加到项目中(然后创建设置表),并最终将数据导出到xml文件,这样更易于使用且更易于修复

1-使用设计器将列(例如settingName和settingValue)添加到本地表(DataTable1)中, 然后


这是一个非常好的答案。它允许您在保持代码优雅的同时获得更多的自由。缺少的是检查返回属性是否为null和有效的逻辑。如果您得到的settings.xml文件已损坏,则可能会发生这种情况。@Vladimir感谢您的夸奖。我想可以在e Load()函数。损坏的文件是一项棘手的工作,因此执行此操作的代码量可能相当高。可能会重复
  [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;
    }
  }
//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");