Что именно делает свойство Hasmorepages PrintPageEventArgs?
Я пытаюсь понять, что такое свойство Hasmorepages PrintPageEventArgs, зачем вы его используете и как оно работает.
У библиотеки MSDN нет действительно хорошего объяснения. Все, что они говорят, это то, что если вы установите значение true, событие printpage вызывается снова. Означает ли это, что событие зацикливается на себе, не покидая и не удаляясь, и снова вызывает себя, или полагается, что вы вызовете событие printpage снова?
Я просто пытаюсь понять свойство PrintPageEventArgs.hasmorepages. Любые советы или помощь будут с благодарностью.
Спасибо,
2 ответа
HasMorePages
является логическим свойством PrintPageEventArgs
Вы получаете в качестве параметра события. Вы установили его на True
после печати текущей страницы, если есть еще несколько страниц для печати, или False
если текущая страница является последней.
События всегда вызываются для вас чем-то в рамках, и никогда не должны вызываться непосредственно вами. Это события, которые означают, что они отправлены, чтобы сообщить вам, что что-то произошло, и дать вам возможность ответить или отреагировать.
Если вы установите его True
, PrintPage
событие вызывается снова автоматически; Вы не называете это сами. (Это именно то, что написано в документации MSDN: если вы установите значение true, событие printpage вызывается снова. Оно не говорит, что вам нужно будет вызывать его снова - оно говорит, что вызывается снова.)
ev.HasMorePages := DoYouHaveMorePagesToPrint;
Для VB.NET пример события и как использовать ev.HasMorePages
см. документацию MSDN для PrintDocument. Для информации о PrintPageEventArgs
см. эту страницу MSDN, на которой есть ссылка на членов PrintPageEventArgs (включая HasMorePages
).
Это не свойство PrintDocument, это свойство PrintPageEventArgs. Экземпляр которого передается в ваш обработчик событий PrintPage.
Способ работы классов PrintController и PrintDocument сильно зависит от способа печати, реализованного в Windows. Основная деталь реализации заключается в том, что она основана на страницах. Драйвер принтера обрабатывает одну страницу за раз, основная функция winapi - StartPage(). Все, что отображается в контексте устройства печати, попадает на одну страницу. Затем функция winapi EndPage() завершает страницу и отправляет ее в спулер.
Это может помочь составить схему вызовов, совершаемых во время печати трехстраничного документа:
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.