繁体   English   中英

C# 保存带有所有控件的表单的 state

[英]C# saving state of the form with all controls

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

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

但是,我想做的是有一个按钮( BACK ),它将使我的表单返回到按钮操作之前的 state ,将控件放回原处, state 它们在操作之前。

我想到了一个C class MyState() ,它将具有类似于 Form1 数组的内容。 我将在该数组中保存表格 state,当我按下back按钮从数组中获取表格 state 的“副本”时,可能还有一个用于索引状态的索引。

不幸的是,我不知道如何实现这一点。 :|

谁能告诉我正确的方法吗?

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;
        }
    }
}

听起来您想要 forms 的高级撤消/重做功能。

这是此类事情的框架: 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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM