在.net下保存WinForms MDI表单状态

时间:2012-02-10 11:26:14

标签: c# winforms .net-4.0

我有一个MDI布局WinForms应用程序。我想在关闭应用程序时保存其打开的表单状态(大小,文本框值,选定的列表索引......),以便在新的启动时检索它们。

有很多方法可以做到这一点,但如果在MDI应用程序中有更多打开的给定表单实例,我找不到保存此数据的解决方案。例如。如果我有两个打开的Form1实例有一个文本框。实例1上的TextBox文本是'a',实例2上的文本是'b'。如果我保存它,例如通过使用.net的功能来app.config,instance2的设置将覆盖instance1的已保存数据,因为它们是相同的类型。因此,在开始加载时,对于两个实例都是'b'。

如何单独保存状态?保存时如何识别它们?

1 个答案:

答案 0 :(得分:0)

没有办法按照描述实现它。您只能保存一个/最后一个状态,因为无法确定应恢复哪个版本。

但您可以使用命名状态存储来实现目标。

您应该创建自己的存储,应该提供两种方法

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

您可以在需要时通过使用其他名称加载状态来随时存储或恢复UI状态。

如果您有疑问,可以两次保存UI状态 第一次它将保存将覆盖默认状态的默认状态ss.SaveState(“default”,state)。 第二次,它将保存将覆盖命名状态的命名状态ss.SaveState(“a”,state)。

在打开的表单上,您可以选择应将哪个状态恢复为默认状态或另一个名称。