Очень, очень, очень редко рекомендуется передавать элементы управления или формы 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
}
Forgot IMemento - просто интерфейс тегов, если вы хотите поместить смотрителя в другую сборку для полной реализации шаблона Memento.
public interface IMemento
{
}