将UI控件或表单传递给类是非常非常非常少见的。这只是制作中的维护/依赖性噩梦。
你不希望你的班级对你的表格的控件有所了解,所有它应该关心的是它的数据。
表单知道自己,知道需要保存的数据以及如何将其恢复到正确的控件。
如果您正在寻找的是撤销/重做功能,您需要查看Memento设计模式。除非您有其他业务需要,否则您不需要创建一个完全有资产的课程。
用于纪念图案。
一个简单的对象包含要保留状态....
internal class Memento: IMemento
{
private object _state;
public void SetState(object state)
{
_state = state;
}
public object GetState()
{
return _state;
}
}
看守对象管理纪念品的形式。
public class Caretaker
{
private Dictionary<int,IMemento> _mementos = new Dictionary<int,IMemento>();
public void AddMemento(int tag, IMemento memento)
{
_mementos.Add(tag, memento);
}
public IMemento GetMemento(int tag)
{
if (_mementos.ContainsKey(tag))
{
return _mementos[tag];
}
return null;
}
}
该表格在更改状态后将新的纪念品保存到看守者。我们利用对象类的极端灵活性...
private void SaveMemento()
{
Memento memento = new Memento();
string[] state = {TextBox1.Text, TextBox2.Text};//expand as needed
memento.SetState(state);
_caretaker.AddMemento(_currentStateIndex, memento);
_currentStateIndex++;
}
窗体根据需要恢复。
private void RevertToPreviousState()
{
Memento memento = (Memento)_caretaker.GetMemento(--_currentStateIndex);
string[] state = (string[]) memento.GetState();
TextBox1.Text = state[0];
TextBox2.Text = state[1];//expand as needed
}
忘记IMemento --just标记接口,如果你想要把看守的另一装配全Memento模式实现。
public interface IMemento
{
}
所以你不想有一个很大的构造函数,但是你想要一个大的类/系统来知道diff表单上的一些控件来处理重做/撤销。我认为在你的设计中,问题在别的地方。如果您通过Undeo/Redo详细介绍一下您想要完成的任务,我可以为您提供帮助。 –