Don't print Form, don't print controls. Instead, you should have some data layer and print everything from data. Use the class
. There is a good code sample here: http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx
Even if you don't use data binding, you need to code something similar. You data is used to populate UI, UI should be able to change the data layer, and the whole data layer is used to update the state of UI.
I suggest you learn and analyze applicability of the following architectural patterns
MVVM — Model View View Model,
MVC — Model-View-Controller,
MVA — Model-View-Adapter,
MVP — Model-View-Presenter,
Pay attention for the motivation of those architectures. If you understand it, you would be able to create better design ideas.