2012-02-10 89 views
0

我有一個MDI佈局WinForms應用程序。我想在關閉應用程序以在新啓動時檢索它們時保存其打開的表單狀態(大小,文本框值,選定列表索引...)。保存WinForms MDI表單狀態.net

有很多方法可以做到這一點,但是如果在MDI應用程序中有更多打開的給定表單的實例,我沒有找到保存這些數據的解決方案。例如。如果我有2個打開的具有文本框的Form1實例。實例1上的TextBox文本是'a',實例2上是'b'。如果我保存它,例如通過使用.net的特性來設置app.config,instance2的設置將覆蓋instance1保存的數據,因爲它們是相同的類型。因此,在啓動時加載時,對於兩個實例都是'b'。

如何分別保存狀態?如何在保存時識別它們?

+0

顯然你需要堅持一個表單列表,而不只是一個表單。沒有任何內置的功能,但很容易使用xml序列化。 – 2012-02-10 13:33:19

+0

我使用可停靠的窗口組件來保持UI佈局,所以我不需要它。它堅持佈局,我只需要堅持「UI」上的數據。 – Tom 2012-02-10 15:01:09

回答

0

沒有辦法像描述的那樣實施它。您只能保存一個/最後一個狀態,因爲沒有辦法確定應該恢復哪個版本。

但是,您可以使用命名狀態存儲來實現目標。

您應該創建你自己的存儲應提供兩個方法

interface IStateStorage 
{ 
    UIState LoadState(string name); 
    void SaveState(string name, State state); 
} 

可以存儲或恢復在任何時候UI狀態時,你和別的名字加載狀態需要它。

如果您的問題可以將UI狀態保存兩次 第一次將保存默認狀態ss.SaveState(「default」,state),它將覆蓋默認狀態。 第二次它將保存命名狀態ss.SaveState(「a」,狀態),它將覆蓋命名狀態。

在表單打開後,您將能夠選擇應將哪個狀態恢復爲缺省名稱或另一個名稱。