C#使用所有控件保存表单的状态

时间:2012-04-05 17:08:46

标签: c# windows forms

我有一个表单,我有一些按钮做东西。

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

但是,我想要做的是有一个按钮(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;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

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

以下是此类内容的框架:http://www.codeproject.com/Articles/10576/An-Undo-Redo-Buffer-Framework

这是一个接近但与你的问题不完全相同的答案(尽管这种模式是相同的):How to implement good and efficient undo/redo functionality for a TextBox

MementoPattern:http://www.codeproject.com/Articles/18025/Generic-Memento-Pattern-for-Undo-Redo-in-C

答案 1 :(得分:0)

没有这样的东西是内置的。你必须自己做。

我这样做:首先,准确定义要保存的状态。例如:

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

现在我们确切地知道需要保存什么。

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

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