2012-07-18 64 views
2

我想了解Hasmorepages PrintPageEventArgs屬性是什麼,爲什麼要使用它,它是如何工作的。Hasmorepages PrintPageEventArgs屬性做了什麼?

MSDN庫並沒有真正有一個很好的解釋。他們所說的是,如果將其設置爲true,則會再次調用printpage事件。這是否意味着事件會自動循環而不會離開或離開並再次調用自己或者依賴於您再次調用printpage事件?

我只是想了解PrintPageEventArgs.hasmorepages財產。任何提示或幫助將不勝感激。

謝謝

回答

2

HasMorePages是您作爲事件的參數PrintPageEventArgs的布爾屬性。打印當前頁面後,如果有更多頁面要打印,則將其設置爲True;如果當前頁面是最後一頁,則將其設置爲True

活動總是要求你通過在框架的東西,並且從不應該是由你直接調用。他們是事件,這意味着他們被派遣告訴你事情已經發生並給你一個機會來回應或反應。

如果你將它設置爲True,該PrintPage事件再次自動調用;你不要自己調用它。 (這正是MSDN文檔所說的:如果將其設置爲true,則打印頁面事件再次被調用。不會說需要再次調用 - 它說再次被調用。)

ev.HasMorePages := DoYouHaveMorePagesToPrint; 

對於事件的VB.NET例子,如何使用ev.HasMorePages,看到MSDN documentation for PrintDocument。有關PrintPageEventArgs的信息,請參閱this MSDN page,該鏈接指向members of PrintPageEventArgs(包括HasMorePages)。

4

它不是的PrintDocument的屬性,它是PrintPageEventArgs的屬性。其中的一個實例被傳遞給您的PrintPage事件處理程序。

的方式PrintController和PrintDocument的類工作嚴重影響的方式打印在Windows系統上實現。核心實現細節是基於頁面的。打印機驅動程序一次處理一頁,底層的winapi函數是StartPage()。呈現給打印設備上下文的任何內容都在一頁上結束。然後EndPage()winapi函數完成頁面並將其提交給假脫機程序。

這可能有助於圖,而3頁的文檔打印的呼籲:

StartDoc() 
    PrintDocument.BeginPrint event 
    StartPage() 
     PrintDocument.PrintPage event, e.HasMorePages = true 
    EndPage() 
    StartPage() 
     PrintDocument.PrintPage event, e.HasMorePages = true 
    EndPage() 
    StartPage() 
     PrintDocument.PrintPage event, e.HasMorePages = false 
    EndPage() 
    PrintDocument.EndPrint event 
EndDoc() 

它應該是明確的,現在,通過分配e.HasMorePage = true,則讓PrintController保持燒製的PrintPage事件。您需要爲您的文檔分頁並在PrintPage事件處理程序中呈現正確頁面的內容。您需要使用BeginPrint事件來將內部頁面計數器設置爲0.

+0

Opps!我的意思是說printpageeventargs不是printdocument。 – ThN 2012-07-18 17:44:49

+0

這就是它應該如何在理論上工作。顯然,在C#或Delphi Prism中。似乎沒有BeginDoc或StartDoc方法,雖然有您指出的BeginPrint和EndPrint。 – ThN 2012-07-18 19:59:44

+0

感嘆,他們是潛在的winapi電話,正如答案中指出的那樣。 – 2012-07-18 20:35:42