I have written a C# 4.0 Windows Forms Application that creates two panels which are both populated exclusively with text labels. I would like to add functionality to my application to print these panels exactly as they appear on the form, but I only want to print these panels and their contents, with no background or other parts of the form.
This link was especially helpful as an overview, but so far I’m only able to print what amounts to a screen capture of the form. The entire form is included, buttons, trim, background, and all. It looks like I need to “rebuild” the form by creating a graphics object (I use the term generically, as I’m not sure what specific graphics-related class I need to employ) and somehow transfer the contents of the panel into this object.
My question is: what classes and/or methods should I research in order to build this graphical object? Also helpful to know: are there any handy tricks within the .NET framework or any libraries out there to automatically fit the result to a single page when building the PrintDocument object?
OK, I found one way to do it (love to my Perl bros out there):
Wrap both panels in another parent Panel. Let’s call this Panel “
parentPanel.” Create a bitmap (memoryBitmap)that is the size ofparentPanel(parentPanel.Size).Next:
parentPanel.DrawToBitmap(memoryBitmap, new Rectangle(parentPanel.Location, parentPanel.Size)Then, in the print page event handler:
e.Graphics.DrawImage(memoryBitmap, 0, 0)I’ll leave this open in the likely event that someone else has a better idea.