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