2009-01-13 66 views
3

在我的應用程序中,我有幾種打印特定數據的表單。爲了實現我使用PrintDocument PrintPage事件。打印多頁不同的數據

如果一個報告的頁數超過1個,我將hasMorePages標誌設置爲true,並且再次觸發該事件,並且我有責任繼續從最後一頁末尾的位置開始打印。

現在,我需要在一個PrintDocument中打印所有這些報告,並且我想重新使用每個報告的代碼,以便在一個打印按鈕中用戶可以打印所有報告。這個想法是不打印幾個文件。

你會怎麼做?

回答

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

我喜歡你的方法......這個夜晚,我會試試看...並讓你知道。由於我有相當大的產品,所以這些改變需要時間。感謝 – Romias 2009-01-13 16:45:28