Don't print Form, don't print controls. Instead, you should have some data layer and print everything from data. Use the class
System.Drawing.Printing.PrintDocument
. 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 (
http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)[
^]):
MVVM — Model View View Model,
http://en.wikipedia.org/wiki/Model_View_ViewModel[^],
MVC — Model-View-Controller,
http://en.wikipedia.org/wiki/Model-view-controller[^]),
MVA — Model-View-Adapter,
http://en.wikipedia.org/wiki/Model–view–adapter[^],
MVP — Model-View-Presenter,
http://en.wikipedia.org/wiki/Model-view-presenter[^].
Pay attention for the motivation of those architectures. If you understand it, you would be able to create better design ideas.
—SA