Путь разработчика    

Как распечатать содержимое элемента управления ListView на нескольких страницах в C#


Когда программа печатает в .NET, объект PrintDocument вызывает обработчик события PrintPage для создания каждой страницы. Эта программа должна установить параметр e.HasMorePages обработчика события, чтобы указать, есть ли больше страниц для печати.

В этом примере отслеживается следующая строка ListView, которая должна быть напечатана. Обработчик события PrintPage начинает печать в этой строке, обновляет следующую строку при завершении печати страницы и соответственно устанавливает e.HasMorePages.

Изменения программы находятся в модуле ListViewExtensions, который добавляет методы расширения в элемент управления ListView. Модуль теперь включает следующую переменную, чтобы отслеживать следующую строку ListView для печати.

Python

Метод pdocListView_PrintPage, который является обработчиком событий PrintPage, используемым для печати, теперь передает метод PrintMultiLineData нижний край печатной страницы, чтобы метод знал, сколько у него места для печати.

Python

Метод PrintMultiLineData также возвращает true, если все данные были напечатаны. Обработчик события PrintPage использует возвращаемое значение для установки e.HasMorePages.

Метод PrintMultiLineData похож на предыдущую версию, за исключением того, что он передает нижнее поле методу DrawMultiLineItems, который фактически выполняет чертеж.

Python

DrawMultiLineItems измеряет строку ListView и, если она подходит на странице, рисует ее и возвращает true. Если строка не подходит, то метод не выводит строку и возвращает false.

Если метод DrawMultiLineItems возвращает false, чтобы указать, что строка не подходит, тогда метод PrintMultiLineData также возвращает false, поэтому обработчик события PrintPage знает, что для печати больше строк.

Если DrawMultiLineItems возвращает true, то PrintMultiLineData увеличивает значение NextListViewRow, чтобы он мог распечатать следующую строку и продолжить.

Окончательное изменение касается метода DrawMultiLineItems. Перед печатью текущей строки метод теперь измеряет свои поля, чтобы увидеть, насколько высока строка. Если новая строка будет превышать допустимую высоту по вертикали, метод возвращает false, чтобы указать, что она не печатала строку. Следующий код показывает эту часть метода.

C#

Остальная часть метода печатает строку, как и раньше. Более подробную информацию см. В предыдущих примерах.

Обратите внимание, что в этом примере не обрабатывается случай, когда одна строка в ListView настолько высока, что она не может помещаться отдельно на странице. Однако это должен быть довольно необычный случай.

Источник: csharphelper.com/blog/2017/06/print-a-listview-controls-contents-on-multiple-pages-in-c/



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Скопируйте и вставьте данные в C#

Пример Сохранить и восстановить фотографии нарисованный пользователем в C# , показывает, как сделать простую программу рисования. Пример Копирование и вста...

20 10 2019 12:15:38

Инициализировать массив массивов в C#

Пример Инициализация двумерных массивов в C# объясняет как инициализировать двумерный массив. Массив массивов несколько похож на двумерный массив, но с нек...

19 10 2019 5:26:36

Используйте всплывающие подсказки в C#

Чтобы создать всплывающие подсказки во время разработки, добавьте компонент ToolTip в форму. Он добавляет новое свойство для каждого из других элементов уп...

18 10 2019 21:47:32

Использование веб-браузера в Python

Модуль webbrowser предоставляет интерфейс высокого уровня, позволяющий пользователям просматривать веб-документы. В большинстве случаев простое вызов функц...

17 10 2019 18:33:36

Как генерировать случайные целые числа в определенном диапазоне в Java

В Java 1.7 или более поздней версии стандартный способ сделать это выглядит следующим образом: min: минимальное значение max: максимальное значение Пример...

16 10 2019 0:41:22

В чем разница между Reader и InputStream в Java

InputStreams используются для чтения байтов из потока. Он захватывает байты данных байтом без какого-либо перевода. Поэтому они полезны для двоичных данных...

15 10 2019 13:47:44

Как нарисовать пунктирные линии, которые видны на любом фоне в C#

В этом примере показано, как рисовать пунктирные линии, которые видны на любом фоне.  Иногда трудно рисовать линии, которые видны поверх фотографии или друг...

14 10 2019 7:39:10

Что такое отказобезопасные и отказоустойчивые итераторы в Java

Неуправляемые итераторы Fail-Fast iterators, возвращенные большинством типов коллекций, не переносят каких-либо структурных изменений в коллекции, итерации...

13 10 2019 4:27:28

Языки программирования низкого уровня: низкоуровневые языки

Языки программирования низкого уровня или низкоуровневые традиционно появились первыми и в последующем стали базисом для развития всей И Т индустрии....

12 10 2019 16:55:53

Преобразование растрового изображения в курсор в C#

Преобразование растрового изображения в курсор непросто, но вы можете сделать это, используя функцию API CreateIconIndirect. В этом примере используется сл...

11 10 2019 18:41:33

JavaScript. Справочник (Аллен Вайк)

Книга "Javascript. Справочник" представляет собой исключительно полный справочник по объектам, методам, атрибутам, высокоуровневым функциям языка написания...

10 10 2019 3:54:49

Используйте спрайты для анимации нескольких прыгающих мячей в C#

Этот пример аналогичен описанному в сообщении Анимация нескольких подпрыгивающих шары в C# , за исключением того, что использует спрайты для управления шар...

09 10 2019 23:22:41

Где разместить JavaScript в HTML-файле?

Существует гибкость, предоставляемая для включения кода JavaScript в любом месте документа HTML. Код JavaScript может быть встроен в: Заголовок страницы ме...

08 10 2019 1:24:41

Как нарисовать пронумерованные круги и сохранить их в файлах на C#

Иногда мне нужно рисовать пронумерованные круги для размещения на изображениях, которые я буду использовать в книгах или статьях. Эта программа позволяет м...

07 10 2019 1:37:55

Создание, чтение и запись текстового файла в C#

В этой статье мы напишем программу в C# для создания, чтения и записи текстового файла. Обычно есть два режима доступа к файлам: текстовый и двоичный. В те...

06 10 2019 0:11:36

Разница между статическими и нестатистическими методами Java

Статический метод принадлежит классу, а нестатический метод принадлежит объекту класса. Статические методы полезны, если у вас есть только один экземпляр,...

05 10 2019 13:54:48

Тип заливки в Java

Изменение значения из одного типа данных в переменную другого типа называется преобразованием типа данных. Существует два типа литья, Примитивное литье тип...

04 10 2019 21:14:25

Метод time.sleep() в Python

Метод python sleep(), используемый для приостановки выполнения для заданного времени (в секундах). Мы можем использовать функцию ожидания python, чтобы ост...

03 10 2019 3:49:31

Сложение, вычитание, умножение, деление, модуль в Bash

В зависимости от того, какой тип работы вы хотите, чтобы ваши сценарии выполнялись, вы можете в конечном итоге использовать арифметику много или не много. ...

02 10 2019 12:35:35


Parse error: syntax error, unexpected ',' in /home/users/9/9161484547/domains/flash-mx.ru/lessons/926.php on line 69