2

我有一个表格,我有一些按钮可以做一些事情。

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

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

我想到了一个CMyState() 类,它具有类似于 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;
        }
    }
}
4

2 回答 2

0

听起来您希望表单具有高级撤消/重做功能。

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

这是一个接近但与您的问题不完全相同的答案(虽然隐含的模式是相同的):How to implement good and efficient undo/redo features for a TextBox

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

于 2012-04-05T17:54:15.450 回答
0

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

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

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

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

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

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

于 2012-04-05T17:55:01.613 回答