我有一个GUI(C#),用于配置连接到计算机串行端口的某些硬件。 我想要包含一个选项,使用户能够将所有配置数据从文本框,复选框等保存到某个文件类型中。然后我希望用户可以选择重新打开文件类型来更新GUI中的文本框,组合框索引,复选框等。 总共我在这个GUI中有大约100种类型的文本框,组合框复选框。
XML文件太不方便了?保存此用户配置的其他更好方法是什么?
答案 0 :(得分:0)
这是一个很好的情况,其中Data Binding变得非常有用,而不是每个持有值的控件都将它们绑定到一个将值保存为其属性之一的类。
public class MySettings
{
public string FilePath {get; set;}
public bool SomeSpecialOption {get; set;}
//...
}
现在,当您设置类时,您可以设置绑定,只需加载或保存单个MySettings
类并使用您熟悉的任何形式的序列化(XML,protobuf等等)。 )。
这样可以非常轻松地保存和加载设置
class Form1 : Form
{
public Form1()
{
InitializeComponent(); //Assumes the binding was set up via the gui to the bindingSource "settingsBindingSource"
settingsBindingSource.DataSource = new MySettings();
}
//...
private void SaveSettings(string path)
{
var ser = new XmlSerializer(typeof(MySettings));
using(var writer = new StreamWriter(path);
{
ser.Serialize(writer, (MySettings)settingsBindingSource.DataSource);
}
}
private void LoadSettings(string path)
{
var ser = new XmlSerializer(typeof(MySettings));
using(var reader = new StreamReader(path);
{
settingsBindingSource.DataSource = (MySettings)ser.Deserialize(reader);
}
}
}
答案 1 :(得分:0)
为了更明确地使保存状态 / 恢复状态操作,您可以选择在设计中使用 Memento模式。
The memento pattern, Wikipedia.
纪念品的创作者将成为你的窗口。纪念品(状态)将是一个明确定义的数据结构(你应该定义一个用于此目的)包含来自文本框的数据,复选框等。发起人负责填充该数据结构(纪念品)并稍后阅读,以便恢复其状态强>
现在,您的问题是如何持久化/序列化& 保湿/反序列化纪念品本身。关于这一点,您可以选择所需的任何格式,但要注意将序列化逻辑封装在明确定义的模块中。例如。 MyMementoXmlSerializer , MyMementoJsonSerializer 或 MyMementoBinarySerializer 。这些模块(类)将共享一个通用接口 MyMementoSerializer 。
现在, JSON 是另一种人类可读的文本格式,您可能需要考虑它。看一下使用 Json.NET 工具包将对象序列化为JSON格式有多简单。来自.NET框架的BinarySerializer是另一种选择,但是......它不是人类可读的:)
总结一下,我会选择JSON格式& JSON.NET工具包是为了简化,但也使用 memento模式, MyMementoSerializer 界面等设计解决方案。