Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.net下保存WinForms MDI表单状态_C#_Winforms_.net 4.0 - Fatal编程技术网

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

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保存的数据,因为它们的类型相同。因此,

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

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


如何分别保存它们的状态?如何在保存它们时识别它们?

没有办法按说明实现它。您只能保存一个/最后一个状态,因为无法确定应还原哪个版本

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

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

interface IStateStorage
{
  UIState LoadState(string name);
  void SaveState(string name, State state);
}
您可以在需要时随时使用其他名称加载状态来存储或恢复UI状态

如果您有问题,可以保存UI状态两次 第一次它将保存默认状态ss.SaveStatedefault,该状态将覆盖默认状态。 第二次,它将保存命名状态ss.SaveStatea,该状态将覆盖命名状态


打开表单后,您可以选择恢复默认状态或其他命名状态。

显然,您需要保留表单列表,而不仅仅是单个表单。没有内置的东西,但是可以很容易地开始xml序列化。我使用了一个可固定的窗口组件,可以持久化UI布局,所以我不需要它。它保持了布局,我必须“只”保持UI上的数据。