Что именно делает свойство 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.

Другие вопросы по тегам