代码之家  ›  专栏  ›  技术社区  ›  Serge

序列化MDI WinForms以实现持久性

  •  2
  • Serge  · 技术社区  · 14 年前

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

    我做了很多搜索,找到了:

    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 回复  |  直到 12 年前
        1
  •  1
  •   Peter Lillevold Rene    14 年前

    您不希望序列化实际的控件实例。它们应该与 Form 他们住在里面。而是看看你让用户定制什么。布局和位置?很好,保存每个控件的顶部和左侧坐标以及控件标识符。是否允许用户添加新控件?保存它们的ID和类型标识符,以便在重新加载时可以在它们的前一个位置重新创建控件。

    无论您使用XML还是其他格式,都没有最佳方法或最佳实践,请选择对您的项目有意义的内容。XML恰好是一种易于使用的格式,在.NET框架中有很好的支持。

        2
  •  0
  •   NoNaMe    12 年前

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