尽管我不太喜欢这种感觉,但显而易见的解决方案是创建一个打印事件,它是其他打印事件的聚合器。您钩住文档打印事件,对于需要打印的每个项目,您手动触发其打印事件。
我认为您将要创建一个类似iprintableForm的接口,该接口有一个方法doprintEvent(对象发送方,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;
}
}
}