c# - 序列化 MDI Winforms 以实现持久性

标签 c# .net xml winforms serialization

我的项目基本上是一个 MDI Winform 应用程序,用户可以在其中通过添加各种控件和更改布局来自定义界面。我希望能够为每个用户保存应用程序的状态。

我做了很多搜索并找到了这些:

How to auto save and auto load all properties in winforms C#?

Save WinForm or Controls to File

基本上据我了解,最好的方法是将数据序列化为 XML,但是 winform 控件不可序列化,因此我会使用代理类:

http://www.codeproject.com/KB/dotnet/Surrogate_Serialization.aspx

现在,我是否需要为我的每个控件编写一个代理类?我需要编写某种递归算法来保存我的所有控件,实现此目的的最佳方法是什么?然后我将如何恢复所有窗口,我应该为此使用纪念品设计模式吗?如果以后要实现多用户,是不是应该用Nhibernate把所有的对象数据存到一个数据库里?我仍在努力解决这个问题,如果有人有任何经验或建议,我将不胜感激,谢谢

最佳答案

您不想序列化实际的控件实例。它们应该与它们所在的 Form 一起创建和销毁。而是看看您让用户自定义的内容。布局和位置?很好,保存每个控件的顶部和左侧坐标以及控件标识符。你让用户添加新控件吗?将它们的 ID 与类型标识符一起保存,以便在需要重新加载时您能够在它们之前的位置重新创建控件。

无论您使用 XML 还是其他格式,都没有最佳方法或最佳实践,请选择对您的项目有意义的格式。 XML 恰好是一种易于使用的格式,并在 .Net Framework 中提供了强大的支持。

关于c# - 序列化 MDI Winforms 以实现持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2837589/

相关文章:

C# List + 对象引用未设置为对象的实例

c# - DirectoryEntry.Invoke ("groups",null) 未检索所有组?

.net - 生成自定义配置节的工具

javascript - XML : Remove parent, 克隆到同级

javascript - 如何从 XML 创建多维数组表?

c# - 以编程方式将工具提示放在 ListBox 类上

c# - 为扩展方法问题转换 IEnumerable<T>

c# - 从快速启动中删除所有链接?

c# - 在 LINQ 查询中进行转换

c# - 如何从 XML 文件导入/读取数据?