|
Программирование >> Программирование с использованием ajax
f$i Simple Editor
Рис. 17.20. Расширение меню File В следующем практическом занятии мы добавим в свое приложение функции печати, добавив в него компонент PrintDocument. ПуМИ WlOCKOe занятие Добавление компонента PrintDocument 1. Добавьте следующие директивы using в начальную часть кода, чтобы можно было использовать классы печати: using System.Drawing; using System.Drawing.Printing; 2. Перетащите компонент PrintDocument из панели инструментов Toolbox на серую область, расположенную под формой. Измените значение свойства Name на PrintDocument и добавьте обработчик события OnPrintPage к событию PrintPage, выбирая кнопку Events в окне Properties. Затем добавьте следующий код в реализацию обработчика события: private void OnPrintPage(object sender, PrintPageEventArgs e) { string [ ] lines = text:BoxEdit. Text. Split ( \n) ; int i = 0; foreach (string s in lines) { lines[i++] = s.TrimEnd(\r); int X = 20; int у = 20; foreach (string line in lines) { e. Graphics. Drawstring (line, new Font ( Arial , 10) , Brushes. Black, x, y) ; у += 15; 3. Добавьте к событию Click меню Print обработчик, вызывающий метод Print () класса PrintDocument. При отсутствии допустимого принтера генерируется исключение типа InvalidPrinterException, которое перехватывается для отображения сообщения об ошибке: private void OnFilePrint(object sender, EventArgs e) try { ргintDociiment. Print () ; catch (InvalidPrinterException ex) { MessageBox. Show (ex .Message, Simple Editor , MessageBoxButtons.OK, MessageBoxIcon.Error); Теперь можно скомпоновать и запустить приложение и напечатать документ. Естественно, чтобы пример работал, в системе должен быть установлен принтер. Описание полученных результатов Метод Print О объекта printDocument с помощью класса PrintController вызывает событие PrintPage: printDocument.Print() ; В обработчике OnPrintPage () с помощью метода String. Split () и символа новой строки \п мы разделяем текст в текстовом поле на строки. Результирующие строки записываются в массив lines типа string: string[] lines = textBoxEdit.Text.Split(\n) ; В зависимости от способа создания текстового файла, строки могут разделяться не только символом новой строки \п, но и символом возврата \г. Метод TrimEndO класса Storing удаляет символ \г из каждой строки: int 1 = 0; foreach(string s in lines) { lines[i + +] = s.TrimEnd(\r ) ; Второй оператор foreach в следующем коде выполняет итерацию по строкам и посредством обращения к е. Graphics . DrawString () отправляет каждую из них на принтер, е - переменная типа PrintPageEventArgs, а свойство Graphics связано с контекстом принтера. Контекст принтера позволяет выполнять прорисовку на устройстве печати. Класс Graphics предлагает ряд методов для выполнения прорисовки в этот контекст. Пока мы еще не можем выбирать принтер, поэтому приложение использует принтер, установленный по умолчанию (сведения о котором хранятся в системном реестре Windows). Для осуществления печатного вывода в методе DrawString () мы используем шрифт Arial размером в 10 пунктов и черную кисть. Позиция вывода определяется переменными х и у. Позиция по горизонтали фиксирована и равна 20 пикселям, а позиция по вертикали увеличивается с каждой строкой: int X = 20; int у = 20; foreach (string line in lines) { e.Graphics.DrawString (line, new Font( Arial , 10), Brushes.Black, x, y) ; У += 15; Пока следующие проблемы остаются нерешенными в коде печати. □ Многостраничная печать не работает. Если печатный документ состоит из нескольких страниц, на печать выводится только первая из них. Желательно было бы также обеспечить печать верхнего колонтитула (например, имени файла) и нижнего колонтитула (например, номера страницы). □ Значения границ страницы жестко определены в программе. Чтобы предоставить пользователям возможность устанавливать другие значения границ страницы мы используем класс PageSetupDialog. □ Выходные данные печати отправляются на принтер, заданный по умолчанию, устанавливаемый пользователем через панель управления. Предпочтительнее было бы, чтобы пользователь мог выбирать принтер в приложении. Для исправления этой ситуации мы используем класс PrintDialog. □ Приложение применяет фиксированный шрифт. Чтобы предоставить пользователю возможность выбора шрифта, можно использовать класс FontDialog, который подробнее описан в последующих разделах. Итак, продолжим реализацию процесса печати для устранения указанных недостатков. Печать нескольких страниц Событие PrintPage вызывается для каждой печатаемой страницы. В следующем практическом занятии мы информируем PrintController о том, что текущая напечатанная страница не была последней страницей, устанавливая значение свойства HasMorePages класса PrintPageEventArgs равным true. Изменение метода OnPrintPageO для печати нескольких страниц 1. Вначале объявите переменную-член lines типа string [] и переменную linesPrinted типа int в классе SimpleEditorForm: Переменные для печати private string[] lines; private int linesPrinted; 2. Измените обработчик OnPrintPageO. В предыдущей реализации метода OnPrintPage () текст был разбит на строки. Поскольку метод OnPrintPage () вызывается с каждой страницей, и разбиение на строки требуется выполнить только один раз при запуске операции печати, удалите весь код из этого метода и замените его новой реализацией: private void OnPrintPage(object sender, PrintPageEventArgs e) { int X = 20; int у = 20; while (linesPrinted < lines.Length) { e.Graphics.DrawString (lines[linesPrinted++], new Font ( Arial , 10), Brushes.Black, x, y) ; у += 15; if (y = e.PageBounds.Height - 80) {
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |