在我的应用程序中,我有几种打印特定数据的表单。为了完成我使用PrintDocument PrintPage事件。
如果一个报告有超过1个页面,我将hasMorePages标志设置为true,并再次触发该事件,并且我有责任从最后一页末尾的位置继续打印。
现在,我需要在一个PrintDocument中打印所有这些报告,并且我想重用每个报告的代码,以便在一个打印按钮中用户将打印所有报告。这个想法是不打印几个文件。
你的做法是什么?
答案 0 :(得分:2)
虽然我不太喜欢它的感觉,但显而易见的解决方案是制作一个打印事件,它是其他打印事件的聚合器。您可以挂钩文档打印事件,对于需要打印的每个项目,您可以手动触发其打印事件。
我想你会想要创建一个像IPrintableForm这样的接口,它有一个方法DoPrintEvent(object sender,PrintPageEventArgs args);
然后您的聚合器获取一堆需要打印并将其存储在实例变量中的表单,并执行以下操作:
private multiDocPageEventHandler(object sender, PrintPageEventArgs args)
{
if (printStack == null) { // all done
throw new Exception("This should never happen.");
}
else { // send to top of stack
printStack.Peek().DoPrintEvent(sender, args);
if (!args.HasMorePages) {
printStack.Pop();
}
args.HasMorePages = printStack.Count > 0;
if (!args.HasMorePages) {
printStack = null;
}
}
}