2012-07-18 41 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

相关问题