Давайте поговорим о последней публикации «Опубликовать объект, производный от PrintDocument, который поддерживает печать больших объемов текста, и сделать исходный код общедоступным».
В статье я опубликовал объект, который наследуется от System.Drawing.Printing.PrintDocument. Этот объект поддерживает создание документов заданий печати из файловых потоков и текстовых строк. В то время я не тестировал его тщательно и обнаружил, что в нем есть большая логика. ошибка в нем.
Признаком ошибки является то, что если вы используете присвоение строк для создания экземпляра объекта, вы будете удивлены, обнаружив, что содержимое документа печатается дважды во время предварительного просмотра. И я обнаружил эту проблему только позже.
После поиска нашел причину, но причина странная.
Принцип заключается в том, что для чтения одной строки текста за раз я использую класс System.IO.StringReader в качестве средства чтения. Его конструктор — это строка, которая передается для сохранения текстового содержимого, а затем используется метод StringReader.ReadLine() для чтения текста и создания печатного содержимого.
Но мне нужно реализовать механизм проверки того, прочитал ли читатель последний контент, а метод StringReader.Peek() должен определять, есть ли за ним контент, и если контента нет, он возвращает значение -1. . После моего тестирования, независимо от того, как оно обнаружено, -1 не возвращается. Вместо этого после двойного ввода содержимого возвращается -1, что приводит к отображению одного и того же содержимого дважды.
Эта ошибка исправлена. Я изменил метод обнаружения с помощью других методов. На этот раз нет необходимости вводить содержимое дважды. Кто скачал, пожалуйста, скачайте еще раз.
Теперь поговорим об элементе управления PrintPreveiwControl.
Первое, что следует отметить, это то, что это пользовательский элемент управления Windows, а не новое окно предварительного просмотра печати. Это часть окна предварительного просмотра, в которой отображается предварительный просмотр. Если вы хотите его использовать, вам необходимо создать форму Windows, а затем использовать ее.
Честно говоря, собственное окно предварительного просмотра печати Microsoft в .net очень плохое. Оно выглядит не очень хорошо и им сложно пользоваться, поэтому Microsoft предоставляет элемент управления System.Windows.Forms.PrintPreviewControl, и этот элемент управления тоже не очень хорош. Основная причина в том, что он не поддерживает колесо мыши, а самое главное, что он не поддерживает подсчет страниц при печати. Количество доступных страниц при предварительном просмотре является необходимым атрибутом для таких кнопок, как «Предыдущая страница» и «Предыдущая страница». «Следующая страница» в окне предварительного просмотра печати.
Поэтому я использовал Reflector для декомпиляции элемента управления Microsoft PrintPreviewControl, использовал его исходный код и добавил обработчик событий OnMouseWheel, а OnMouseWheel специально разработан для управления работой колеса мыши при его прокрутке. Также опубликуйте исходный код.
Я добавил много комментариев в метод OnMouseWheel. Друзья, желающие разобраться с колесиком мыши, могут воспользоваться принципами этого кода.
Загрузка: Нажмите здесь, чтобы загрузить
http://www.cnblogs.com/submaie/archive/2006/08/11/474568.html
.