C#保存具有所有控件的窗体的状态

本文关键字:窗体 状态 控件 保存 | 更新日期: 2023-09-27 18:30:04

我有一个表单,我有一些按钮在做一些事情。

当我按下窗口窗体控件的按钮时,如文本框或组框,按钮在我的窗体上出现、消失和更改位置,因为它是一个动态窗体:)

然而,我想做的是有一个按钮(BACK),它将使我的表单恢复到按钮操作前的状态,将控件放回操作前的位置和状态。

我想到了一个C类MyState(),它将有一个类似于Form1数组的东西。我将把表单状态保存在该数组中,当我按下back按钮从数组中获得表单状态的"副本"时,可能还有一个索引状态的索引。

很遗憾,我不知道如何实现。:|

有人能告诉我做这件事的正确方法吗?

class Mystate
{
    private Form1 [] state;
    public Mystate(int n)
    {
        this.state = new Form1[n];
    }
    public Form1 this[int index]
    {
        get
        {
            return state[index];
        }
        set
        {
            this.state[index] = value;
        }
    }
}

C#保存具有所有控件的窗体的状态

听起来您想要为表单提供高级撤消/重做功能。

以下是这些事情的框架:http://www.codeproject.com/Articles/10576/An-Undo-Redo-Buffer-Framework

以下是一个接近但与您的问题不完全相同的答案(所实现的模式是相同的):如何为TextBox 实现良好且高效的撤消/重做功能

记忆模式:http://www.codeproject.com/Articles/18025/Generic-Memento-Pattern-for-Undo-Redo-in-C

没有内置类似的功能。你必须自己做这件事。

我会这样做:首先,准确地定义你想保存的状态。示例:

Control.Bounds
Control.Text
Checkbox.IsChecked
NumericUpDown.Value
...

现在我们确切地知道需要拯救什么了。

秒,我们需要一种方法来创建表单当前状态的快照,并递归地为所有控件创建快照。您可以使用反射来实现这一点,这样无论您有多少控件,一切都将是自动的。

第三,您需要能够将快照应用于Form的实例。这与(2)的过程相反。这也可以使用反射来完成。