2012-02-10 67 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”,状态),它将覆盖命名状态。

在表单打开后,您将能够选择应将哪个状态恢复为缺省名称或另一个名称。