Программирование >>  Программирование с использованием ajax 

1 ... 176 177 178 [ 179 ] 180 181 182 ... 396


е. HasMorePages = true; return;

linesPrinted = О;

e.HasMorePages = false;

3. Добавьте обработчик OnBeginPrint к событию BeginPrint объекта printDocument. Обработчик OnBeginPrint вызывается только один раз для каждого задания печати, и в нем нужно создать массив lines:

private void OnBeginPrint(object sender, PrintEventArgs e) {

lines = textBoxEdit.Text.Split(\n); int i = 0;

foreach (string s in lines) {

lines [i++] = s.TrimEndCXr) ;

4. Добавьте обработчик события OnEndPrint к событию EndPrint объекта print Document. Здесь можно освободить ресурсы, выделенные в методе OnBeginPrint.

В данном примере мы выделили массив строк и обратились к нему через ссылку на переменную lines. В методе OnEndPrint ссылка переменной lines устанавливается в значение null, поэтому сборщик мусора может очистить строковый массив:

private void OnEndPrint(object sender, PrintEventArgs e) {

lines = null;

5. После компоновки проекта можно запустить задание печати для многостраничного документа.

Описание полученных результатов

Запуск задания печати с помощью метода Print () класса PrintDocument ведет к последовательному однократному вызову метода OnBeginPrint () и вызову метода OnPrintPage () для каждой страницы.

В методе OnBeginPrint () текст, помещенный в текстовое поле, разбивается на массив строк. Каждая строка в массиве представляет одну строку, поскольку мы выполняем разбиение по символу новой строки (\п) и удаляем символ возврата каретки (\г), как и ранее:

lines = textBoxEdit.Text.Split С\п); int 1=0;

foreach (string s in lines) {

lines[i + +] = s.TrimEnd(Xr) ;

Метод OnPrintPage () вызывается после метода OnBeginPrint (). Печать должна продолжаться до тех пор, пока количество напечатанных строк остается меньше числа строк, предназначенных для печати. Свойство lines.Length возвращает количество строк в массиве lines. Значение переменной linesPrinted увеличивается на единицу с каждой строкой, отправленной на принтер:



е.Graphics.Drawstring(lines[linesPrinted++], new Font( Arial , 10), Brushes.Black, x, y) ;

После выполнения печати строки мы проверяем, не лежит ли заново вычисленная позиция по вертикали вне границ страницы. Кроме того, мы уменьшаем размеры границ на 80 пикселей, поскольку, в частности, нежелательно, чтобы печать выполнялась до самого края бумаги, т.к. многие принтеры в любом случае не могут выполнять такую печать. По достижении этой позиции значение свойства HasMorePages класса PrintPageEventArgs устанавливается равным true, чтобы поставить контроллер в известность о том, что метод OnPrintPage () должен быть вызван снова для другой предназначенной для печати страницы - вспомните, что объект PrintController содержит метод PrintLoop О , определяющий последовательность действий для каждой печатаемой страницы и прекращающий свое выполнение, если значение свойства HasMorePages равно false. (Значение этого свойства по умолчанию - false, что ведет к печати только одной страницы.)

у += 15;

if (у = e.PageBounds.Height - 80) {

е.HasMorePages = true; return;

Диалоговое окно PageSetupDialog

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

Этот класс позволяет конфигурировать размеры и источники бумаги, ориентацию и поля печатных страниц. А поскольку эти параметры зависят от используемого принтера, данное диалоговое окно позволяет также выбирать принтер.

Основные свойства, которые активизируют или отключают конкретные параметры этого диалогового окна, а также свойства, применяемые для доступа к значениям, приведены на рис. 17.21. Эти свойства описаны в последующих разделах.

AllowPaper -

AllowOrientation -

P t S tup

Souce [l -Onertation

10 10

lop 10 Bctlom 10

- PageSettings.PaperSize

- PageSettings.PaperSource

-AllowMargins

- MinMargins PageSettings.Margins

Puc. 17.21. Основные свойства диалогового окна PageSetupDialog

while (linesPrinted < lines.Length)



Бумага

Значение true свойства AllowPaper означает, что пользователи могут выбирать размеры и источник бумаги. Свойство PageSetupDialog. PageSettings . PaperSize возвращает экземпляр объекта PaperSize, свойства которого Height, Width и PaperName содержат информацию соответственно о высоте, ширине и названии формата бумаги. Свойство PaperName специфицирует такие имена, как Letter или А4. Свойство Kind возвращает перечисление, из которого можно извлечь значение перечисления PaperKind. Перечисление PaperKind состоит из значений множества различных видов бумаги, которые определяют размеры бумаги, такие как A3, А4, А5, Letter, LetterPlus и LetterRotated.

Свойство PageSetupDialog. PageSettings . PaperSource возвращает экземпляр Paper Sou г се, содержащий информацию об источнике бумаги принтера и подходящем для него типе бумаги (при условии правильной установки настроек принтера).

Поля

Установка значения свойства AllowMargins равным true позволяет пользователям устанавливать значение полей печатной страницы. Указывая значение свойства MinMargins, можно определить минимальные значения, которые сможет вводить пользователь. Информация о полях хранится в свойстве PageSetupDialog. PageSettings .Margins. Возвращенный объект Margins (Поля) содержит свойства Bottom (Нижнее), Left (Левое), Right (Правое) и Тор (Верхнее).

Ориентация

Свойство AllowOrientation определяет, могут ли пользователи осуществлять выбор между печатью в книжной и альбомной ориентации. Выбранное значение можно выяснить, запрашивая значение свойства PageSetupDialog. PageSettings. Landscape, которое является булевским значением, специфицирующим альбомный режим, если оно равно true, и книжный - если false.

Принтер

Свойство Allow Printer определяет, могут ли пользователи выбирать принтер. В зависимости от значения этого свойства кнопка Printer активизирована (true) или отключена (false). В свою очередь, обработчик этой кнопки открывает диалоговое окно PrintDialog, которое мы будем использовать следующим. В следующем практическом занятии мы добавим в приложение возможность конфигурирования параметров страницы для печати.

11ра1чвсков занятй*Г Добавление диалогового окна

PageSetupDialog

1. Перетащите компонент PageSetupDialog из панели инструментов Toolbox на форму в окне Forms Designer. В качестве значения свойства Name установите dlgPageSetup, а в качестве значения свойства Document - printDocument, чтобы связать диалоговое окно с документом, который нужно напечатать.

2. Добавьте обработчик события Click к пункту меню Page Setup (Параметры страницы) и добавьте следующий код для отображения диалогового окна с помощью метода ShowDialog (). Возвращаемое значение метода ShowDialog () здесь можно не проверять, поскольку реализация обработчика события Click кнопки ОК уже устанавливает новые значения в соответствующем объекте PrintDocument:



1 ... 176 177 178 [ 179 ] 180 181 182 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика