C# 在.net下保存WinForms MDI表单状态
我有一个MDI布局WinForms应用程序。我想保存它打开的表单状态大小、文本框值、选定列表索引。。。关闭应用程序以在新启动时检索它们时 有很多方法可以做到这一点,但如果MDI应用程序中有更多给定表单的开放实例,我没有找到保存这些数据的解决方案。例如,如果我有两个打开的Form1实例,其中有一个文本框。实例1上的文本框文本为“a”,实例2上的文本为“b”。如果我使用.net的功能将其保存到app.config,instance2的设置将覆盖instance1保存的数据,因为它们的类型相同。因此,在开始加载时,两个实例的设置都将为“b”C# 在.net下保存WinForms MDI表单状态,c#,winforms,.net-4.0,C#,Winforms,.net 4.0,我有一个MDI布局WinForms应用程序。我想保存它打开的表单状态大小、文本框值、选定列表索引。。。关闭应用程序以在新启动时检索它们时 有很多方法可以做到这一点,但如果MDI应用程序中有更多给定表单的开放实例,我没有找到保存这些数据的解决方案。例如,如果我有两个打开的Form1实例,其中有一个文本框。实例1上的文本框文本为“a”,实例2上的文本为“b”。如果我使用.net的功能将其保存到app.config,instance2的设置将覆盖instance1保存的数据,因为它们的类型相同。因此,
如何分别保存它们的状态?如何在保存它们时识别它们?没有办法按说明实现它。您只能保存一个/最后一个状态,因为无法确定应还原哪个版本 但您可以使用命名状态存储来实现这一目标 您应该创建自己的存储,它应该提供两种方法
interface IStateStorage
{
UIState LoadState(string name);
void SaveState(string name, State state);
}
您可以在需要时随时使用其他名称加载状态来存储或恢复UI状态
如果您有问题,可以保存UI状态两次
第一次它将保存默认状态ss.SaveStatedefault,该状态将覆盖默认状态。
第二次,它将保存命名状态ss.SaveStatea,该状态将覆盖命名状态
打开表单后,您可以选择恢复默认状态或其他命名状态。显然,您需要保留表单列表,而不仅仅是单个表单。没有内置的东西,但是可以很容易地开始xml序列化。我使用了一个可固定的窗口组件,可以持久化UI布局,所以我不需要它。它保持了布局,我必须“只”保持UI上的数据。