Хотя мне не очень нравится ощущение этого, очевидным решением является создание события печати, которое является агрегатором других событий печати. Вы подключаетесь к событиям печати документа и для каждого элемента, который необходимо распечатать, вы вручную запускаете его события печати.
Я думаю, вы захотите создать интерфейс, такой как 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;
}
}
}