将 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 -- 只是一个标记接口,以防您想将看守者放在另一个程序集中以实现完整的 Memento 模式。
public interface IMemento
{
}