- •Тема 4.10. Текстовые файлы
- •4.10.1. Основные понятия
- •4.10.2. Средства vb для доступа к текстовым файлам
- •4.10.3. Использование классов StreamReader, StreamWriter и объекта My.Computer.FileSystem для работы с текстовыми файлами
- •4.10.4. Печать текстовых файлов
- •4.10.5. Задачи для самостоятельного решения по теме «Текстовые файлы»
- •4.10.6. Тестовые задания по теме «Текстовые файлы»
- •Тема 4.10. Текстовые файлы Страница 280
4.10.4. Печать текстовых файлов
Многие приложения MS Windowsв процессе работы, кроме вывода результатов в элементы управления, например, в TextBox, требуют получение результатов работы программы на бумаге. В VB нет специальных операторов вывода на печать, а методы, используемые для организации печати, зависят от типа и количества генерированного вывода для печати. Причем во всех случаях основным механизмом для управления печати является класс PrintDocument, который может быть создан двумя способами:
добавлением на форму элемента управления PrintDocument;
определением в программном коде.
Класс PrintDocument включает несколько полезных объектов. Объект PrintSettings содержит настройки принтера по умолчанию, объект PageSettings содержит настройки печати для конкретной страницы, объект PrintPageEventArgs содержит информацию о событиях для печатаемой страницы. Так как класс PrintDocument определен на пространстве имен System.Drawing.Printting,то при его использовании в верхнюю часть кода формы необходимо добавлять оператор Imports:
Imports System.Drawing.Printing
Для примера рассмотрим простейший случай печати текста из объекта TextBox, в котором класс PrintDocument определен в коде программы, а для отправки всего содержимого текстового поля на принтер по умолчанию будет использоваться метод Graphics.DrawString. Причем необходимо обратить внимание, что создаваемая программа позволяет печатать не более одной страницы текста. Чтобы напечатать несколько станиц, требуется существенно усложнить код программы.
Пример 4.10.4-1. Взяв за основу проект из примера 4.10.3-1, создать проект Пример4.10.4-1,в котором содержимое текстового файла считывается в TextBox2 и выводится на печать.
Добавим на форму проекта примера 4.10.3-1 элемент управления Button с именем
Button3 и надписью Печать.
Получившаяся форма должна выглядеть подобно показанной на рис. 4.10.4-1.
Рис. 4.10.4-1
Добавить следующий исходный код в класс формы (рис. 4.10.4-2).
Imports System.Drawing.Printing
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' Открыть существующий фаайл и загрузить из него текст Try TextBox2.Text = My.Computer.FileSystem.ReadAllText(TextBox1.Text) Catch ex As Exception MsgBox("Файл не может быть открыт из за "& _ " следующей ошибки:"& vbCrLf & vbCrLf & ex.Message) End Try End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click
' Записать в файл отредактированные данные If (My.Computer.FileSystem.FileExists(TextBox1.Text) = True) Then If (MsgBox("Файл уже существует. Переписать в него данные?", _ MsgBoxStyle.YesNo Or MsgBoxStyle.Question, _ "Переписать") <> MsgBoxResult.Yes) Then Exit Sub End If
' Запись данных Try My.Computer.FileSystem.WriteAllText(TextBox1.Text, _ TextBox2.Text, False) Catch ex As Exception MsgBox("Данные в файл не могут быть переписаны из за "& _ " следующей ошибки:"& vbCrLf & vbCrLf & ex.Message) End Try End Sub
Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click
Try Dim PrintDocument1 As New PrintDocument AddHandler PrintDocument1.PrintPage, AddressOfMe.PrintText PrintDocument1.Print() Catch ex As Exception MessageBox.Show("Проблемы печати", ex.ToString()) End Try End Sub
Private Sub PrintText(ByVal sender As System.Object, _ ByVal pr As PrintPageEventArgs) pr.Graphics.DrawString(TextBox2.Text, _ New Font("arial", 12, FontStyle.Regular), Brushes.Black, 100, 150) pr.HasMorePages = False End Sub
EndClass |
Рис. 4.10.4-2
В событийной процедуре SubButton3_Click( )определена переменная PrintDocument1, которая представляет объект PrintDocument и используется для объявления обработчика ошибок и печати текстового документа.
В этой процедуре использется оператор AddHandler, который указывает, что когда возникает событие PrintPage (Печать страницы) объекта PrintDocument1, должен вызываться обработчик событий PrintText. Технически, для указания обработчика события PrintText используется оператор AddressOf, который при возникновении события передает вызовы в соответствующий обработчик событий – процедуру PrintText. Эта процедура обрабатывает событие печати, генерируемое методом PrintDocument1.Print. В конце этой процедуры свойство pr.HasMorePage устанавливается в значение False, чтобы указать, что выводимая страница последняя.
Запустить программу на выполнение.
Ввести путь к файлу в текстовое поле TextBox1 и нажать кнопку Открыть файл.
В текстовом поле TextBox2 отобразится содержимое текстового файла.
Нажать кнопку Печать.
На текущий принтер будет выдано содержимое текстового поля TextBox2.