[英]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.