You need to create a
Finite-State Machine (FSM) for your form. There are no complication: you should describe everything in term of states. For example, if some calculations are triggered, where the result go? It should be reflected in some data members of the form. And so on. So, start with the analysis of each form in terms of state machine, don't think of preserving existing form functionality. Design form based on the model, not the other way around. When this is done, implement two operations: storing FSM and loading FSM, so the form would be populated with the data.
See
http://en.wikipedia.org/wiki/Finite-state_machine[
^].
FSM itself can be implemented based on enumeration type. Given a set of states, a FSM can be represented as a sub-set of the Cartesian square of this set, each element of the sub-set representing an allowed transition. I developed a generic class which implements the data indexed by the elements of Cartesian square build over the arbitrary enumeration type, so the formal mechanism is read. Please see my article
Enumeration Types do not Enumerate! Working around .NET and Language Limitations[
^], see the chapter "3.6 Cartesian Square".
—SA