2010-05-14 58 views
2

基本上我的項目是一個MDI Winform應用程序,用戶可以通過添加各種控件和更改佈局來自定義界面。我希望能夠爲每個用戶保存應用程序的狀態。序列化MDI Winforms的持久性

我已經做了相當多的搜索,發現這些:

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將所有對象數據存儲在數據庫中嗎?我仍然試圖圍繞這個問題,如果任何人有任何經驗或建議,我將不勝感激,謝謝

+0

表單和控件工作,我只是試圖使它持久。 – Serge 2010-05-14 23:19:31

+0

還有表單設置選項,但它已被證明不足以用於我正在使用的控件。 – Serge 2010-05-14 23:20:33

回答

1

你不想序列化實際的控制實例。他們應該與他們居住的Form一起創建和銷燬。而是看看你讓用戶自定義。佈局和位置?很好,將每個控件的頂部和左側座標以及控件標識符保存起來。你讓用戶添加新的控件?保存它們的id和一個類型標識符,這樣當它重新加載的時候就可以在他們以前的位置重新創建控件。

無論您使用XML還是其他格式,都沒有最佳方法或最佳實踐,請選擇對您的項目有意義的內容。在.Net框架中XML很好地支持XML格式。

+0

這就是我在想什麼,我只是想弄清楚如何最好地實現這一點。我是否需要創建一個對象來存儲這些屬性,然後序列化?遍歷表單以獲取所有控件及其屬性的最佳方法是什麼? – Serge 2010-05-14 22:29:26

+0

迭代Form.Controls並在迭代時寫出它們的屬性。恢復狀態是相似的,但如果您支持添加新控件,則需要更多的工作。 – 2010-05-15 10:01:10

0

我知道有一個軟件LinsUI佈局管理器,它可以很好地處理你的問題。他們爲有興趣的開發者提供免費版本You can check the site。 Cheer