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

发布于 2025-01-04 03:20:17 字数 345 浏览 1 评论 0原文

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

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

我怎样才能分别保存他们的状态?保存时如何识别?

I have an MDI layout WinForms application. I'd like to save its opened forms state (size, text box values, selected list indexes...) when closing app to retrieve them at a new startup.

There are plenty of ways to do it, but I did not find a solution to save this data, if there are more open instances of a given form in an MDI app. E.g. if I have 2 opened instances of Form1 that has a textbox. TextBox's text on instance 1 is 'a' and on instance 2 is 'b'. If I save it e.g. to app.config by using .net's features, instance2's settings will overwrite instance1's saved data, because they're the same type.So when loading at start it would be 'b' for both instances.

How can I save their state separately? How to identify them when saving them?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒浓于脸红 2025-01-11 03:20:17

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

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

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

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

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

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

在打开的表单上,您将能够选择应恢复默认状态或另一个指定状态。

There is no way to implement it as described. You can save only one/last state because there is no a way to determinate which version should be restored.

But you can use a named state storage to achive the goal.

You should create you own storage that should provide two methods

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

You can store or recover UI state in anytime when you need it by loading state with other name.

In case of your question you can save UI state twice
At first time it will save default state ss.SaveState("default", state) that will overwrite default state.
At second time it will save named state ss.SaveState("a", state) that will overwrite named state.

On form open you will able to choose which state should be restored a default one or another named one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文