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;
}
}
}
听起来您想要为表单提供高级撤消/重做功能。
以下是这些事情的框架: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)的过程相反。这也可以使用反射来完成。