【问题标题】:Saving WinForms MDI forms state under .net在 .net 下保存 WinForms MDI 表单状态
【发布时间】:2012-02-10 11:26:13
【问题描述】:

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

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

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

【问题讨论】:

  • 显然您需要保留一个表单列表,而不仅仅是一个表单。没有任何内置但很容易使用 xml 序列化。
  • 我使用了一个可停靠的窗口组件,它可以保持 UI 布局,所以我不需要它。它保留了布局,我必须“仅”保留 UI 上的数据。

标签: c# winforms .net-4.0


【解决方案1】:

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

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

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

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

您可以随时通过加载其他名称的状态来存储或恢复 UI 状态。

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

在打开表单时,您将能够选择应恢复默认状态或另一种命名状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多