序列化MDI Winforms以保持持久性

时间:2010-05-14 20:58:29

标签: 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

现在,我是否需要为每个控件编写代理类?我需要编写一些递归算法来保存我的所有控件,实现这一目标的最佳方法是什么?如果我使用memento设计模式,我将如何恢复所有窗口?如果我想稍后实现多个用户,我应该使用Nhibernate将所有对象数据存储在数据库中吗?我仍然试图解决问题,如果有人有任何经验或建议我会非常感激,谢谢

2 个答案:

答案 0 :(得分:1)

您不希望序列化实际的控件实例。它们应该与它们所在的Form一起创建和销毁。而是看看你让用户自定义的内容。布局和位置?很好,保存每个控件的Top和Left坐标以及控件标识符。你让用户添加新的控件吗?保存它们的ID以及类型标识符,这样当重新加载时,您可以在之前的位置重新创建控件。

无论您使用XML还是其他格式,都没有最佳方法或最佳实践,请选择对您的项目有意义的内容。 XML在.Net Framework中得到了很好的支持,因此很容易使用格式。

答案 1 :(得分:0)

我知道有一个软件,LinsUI布局管理器,可以很好地处理您的问题。他们为感兴趣的开发者提供免费版本You can check the site。 欢呼