I would use a Passive View which you can read about here.
- You would put each form behind an interface
- Each form would register itself with one or more UI Objects
- The UI Object should be naturally organized, like Setup, Entry, Display, etc. A word processor may only have one UI Object for each document. While a machine controller may have multiple object for each screen.
- The interface are implemented as thin shells passing on events to the UI Objects and exposing presentation controls, drawing surfaces to the UI Object.
- The UIObject then take the input and figures out which command object to execute
- The Command Object will update the model, then tell one or more UI Objects to update the view.
- The UIObjects update the views.
Note that nowhere does anything beyond the UI Interface knows about buttons, check boxes, and the like. You use the Interface to abstract the actual implementation away.
This will give you several advantage. First it will document how your code interacts with the UI, give you a place to implement mock objects to use for automated testing, and finally allow much more latitude in changing the UI.
For example substituting clickable panels instead of command buttons. The form will then just start passing the click events from the panels instead of the button. The form can remain ignorant of the actual command each widget is supposed to do. The UI Object takes care of that.