I’m doing some custom printing using a PrintDocument in my application. I have a requirement of logging when our items are successfully printed. I originally achieved this with something like:
print_doc.EndPrint += (o,e) => printed_callback ();
To make my printed_callback get invoked when a print finished. However, now that I’m adding preview support, I’m passing a PrintDocument constructed in exactly the same way into a PrintPreviewDialog. Doing so causes the EndPrint event to be invoked after the initial rendering of the printout needed for the preview.
As a result, even if a user clicks “Preview” and then just closes the preview, our logging code gets invoked.
Any suggestions for how to differentiate between a real printout and a “preview print” ? Unfortunately, I can’t just not hook up to EndPrint for the PrintDocument passed to the PrintPreviewDialog since the user may click the “Print” button in the preview dialog and trigger a printout.
Ok, so I actually managed to figure this out myself, using the PrintDocument.PrintController property, and checking the
IsPreviewproperty of the controller. My final coded ended up as follows: