2009-01-13 8 views
3

Dans mon application, j'ai plusieurs formulaires qui impriment des données spécifiques. Pour cela, j'utilise PrintDocument PrintPage Event. Si un rapport comporte plus d'une page, je mets l'indicateur hasMorePages à true et l'événement est à nouveau déclenché et il m'incombe de continuer à imprimer depuis l'endroit où j'étais à la fin de la dernière page.Impression de plusieurs pages de données différentes

Maintenant, j'ai besoin d'imprimer tous ces rapports dans ONE PrintDocument, et je veux réutiliser le code de chacun, de sorte que dans un bouton d'impression, l'utilisateur obtiendra tous les rapports imprimés. L'idée est de ne pas imprimer plusieurs documents.

Quelle serait votre approche pour le faire?

Répondre

2

Bien que je n'aime pas trop la sensation, la solution évidente est de faire un événement d'impression qui est un agrégateur d'autres événements d'impression. Vous vous connectez aux événements d'impression de document et pour chaque élément à imprimer, vous déclenchez manuellement ses événements d'impression.

Je pense que vous voudrez faire une interface comme IPrintableForm qui a une méthode DoPrintEvent (expéditeur d'objet, arguments PrintPageEventArgs);

alors votre aggrégateur obtient une pile de formulaires qui ont besoin d'imprimer et le stocke dans une variable d'instance et fait quelque chose comme:

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; 
     } 
    } 
} 
+0

J'aime votre approche ... ce soir, je vais faire un essai ... et vous le savez. Comme j'ai un très gros produit, de tels changements prennent du temps. MERCI – Romias

+1

Cela a très bien fonctionné ... les formes intérieures qui ont plus d'une page sont imprimées le long de celles qui n'en ont qu'une ... donc exactement ce dont j'avais besoin. Maintenant, j'ai juste besoin de faire quelques modifications pour certains formulaires qui impriment plus que sur le rapport mais qui tweakening votre code. Merci encore – Romias

Questions connexes