【问题标题】:Save and load List<Form> in C#在 C# 中保存和加载 List<Form>
【发布时间】:2013-06-13 09:04:17
【问题描述】:

我想知道在应用程序关闭后是否可以在 C# 中保存表单状态?我尝试使用 List,每当我创建一个 Form 实例时,该实例就会添加到 List 中,并且它一直存在,直到它被删除。它工作正常,我可以查看、编辑和删除保存的表单,直到应用程序关闭。那么,考虑到 Form 不可序列化,是否有机会以某种方式保存 List 并稍后加载?

【问题讨论】:

  • 您可以将布局保存为 XML,然后在打开应用程序时重新加载。
  • 我认为使用 XML 进行各种设置是一个非常好的设计。 XML 应用在很多领域,并且变得越来越重要。
  • 那是 WinForm 吗?您希望保存表单的哪些控件/属性?
  • 那是一个 Windows 窗体。它包含DataGridView、TabControl、TableLayoutPanel等,所以我想全部保存。我不熟悉 XML,所以我正在尝试其他(可能是错误的)方式......
  • 首先创建一个类,该类记录有关如何创建对表单的修改的说明。我会先制作一个撤消和重做按钮。如果您可以通过代码撤消和重做对表单的修改,那么您可以很容易地将这些指令转换为纯文本文件或 xml 中的自定义语法。您将无法直接保存列表并重新加载它,您必须创建自己的语法。

标签: c# winforms list savestate


【解决方案1】:

Control 和 Form 类不可序列化。这有一个很好的理由,许多它们的属性值在很大程度上取决于程序的执行状态。像 Handle 一样,非常重要但总是与众不同。 UICues,取决于用户是否按下了 Alt 键。甚至像位置和大小这样简单的东西,取决于视频适配器设置和用户偏好。

您不会想要序列化这些属性。您要保留的是用于初始化控件的 data。这当然完全取决于你的程序,根本没有共性。因此,您可以创建一个存储 UI 状态的类。您可以根据需要使其可序列化并选择您喜欢的方式来实现序列化,有很多方法可以做到这一点。在代码中将视图与模型严格分开通常对于顺利完成这项工作非常重要。

【讨论】:

  • 好点;但是,在目前的状态下,这并不能回答 OP 提出的问题。他已经知道该表单不可序列化并且正在寻求替代方案。
  • 我在第二段中特别提到了这一点。当没有共同点时,就有很多选择。事实上,它们都将起作用。我只能推荐重要的东西,以使 任何 易于实施。
猜你喜欢
  • 2015-03-18
  • 2016-12-22
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多