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

Как распечатать ListView с большим содержимым в C#


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

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

Основной подход для каждой строки состоит в том, чтобы нарисовать позиции строки в разрешенных ширинах столбцов и измерить объем вертикального пространства, который им нужен. После рисования всех элементов программа рисует вокруг них квадраты, которые высоки, чем элемент, который требует наибольшего вертикального пространства. Затем код начинает рисовать следующую строку данных ниже самого высокого элемента.

PrintMultiLineData метод расширения показано в следующем коде управляет процессом печати.

C#

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

Сначала метод получает горизонтальное разрешение экрана и использует его для расчета масштабного коэффициента для преобразования из пикселей, используемых для измерения ширины столбцов, на устройства печати. (Для получения дополнительной информации см. Мой предыдущий пост.

Затем код копирует ширину столбца элемента управления ListView в массив, добавляя дополнительную область для полей и масштабируя результат до единиц принтера.

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

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

Затем для каждой строки данных код использует запрос LINQ для выбора текстовых значений, отображаемых подпозициями в этой строке. (Обратите внимание, что первый подпункт содержит текст основного элемента, поэтому вам не нужно рассматривать этот элемент как особый случай.) Затем код вызывает метод DrawMultiLineItems, передавая ему массив текстовых значений подпозиции плюс другие параметры.

Следующий код показывает метод DrawMultiLineItems.

Python

Метод DrawMultiLineItems рисует одну строку элементов данных. Переменная row_height отслеживает наибольшую высоту, необходимую любому элементу в строке.

Для каждого столбца в строке код использует метод MeasureString объекта Graphics, чтобы узнать, сколько текста в столбце этого столбца требуется. Если для текста требуется больше вертикального пространства, чем row_height, код обновляет row_height. Затем код рисует текст элемента в требуемом пространстве.

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

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

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

(Обратите внимание, что вы можете повторно использовать метод DrawMultiLineItems для рисования другой строки данных, где элементы могут иметь разную высоту.)

Источник: http://csharphelper.com/blog/2017/06/print-a-listview-with-large-contents-in-c/



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

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

Эффект радуги изображения в C#

Этот пример расширяет сообщение Использовать объект ImageAttributes для применения общих цветовых тонов к изображению на C# для радуги изображения. Он отби...

02 06 2020 21:14:13

Как перезагрузить страницу в JavaScript

Поскольку существует много способов сделать это, но следующий способ - перезагрузить один и тот же документ с помощью JavaScript. Свойство Window.location...

01 06 2020 14:51:54

Как работает метод hashCode () Java?

Java.lang.Object имеет методы, называемые hasCode(), и эти методы играют значительную роль в приложении реального времени. Объект hashCode() Object фактиче...

31 05 2020 13:35:56

Температура по Цельсию и Фаренгейту в C#

В этой статье мы напишем программу переводящую температуру по Цельсию в температуру по Фаренгейту в C#. Вывод:  ...

30 05 2020 14:16:48

Может ли класс верхнего уровня быть закрытым или защищенным в Java

Нет. Класс верхнего уровня как закрытый был бы совершенно бесполезен, потому что ничто не имело бы к нему доступа. Если класс верхнего уровня объявлен как...

29 05 2020 16:52:34

Получить рабочую область экрана в C#

Рабочая область является частью экрана, который обычно может занимать приложение. Эта область может находиться в разных частях экрана в зависимости от разм...

28 05 2020 21:20:53

Сжатие файлов JPG до определенного размера в C#

Пример Оптимизация уровня сжатия JPEG и файла размер в C# показывает, как сохранить JPG-файл с различными уровнями сжатия. Использование меньшего уровня де...

27 05 2020 3:25:52

Изучаем Python, 4-е издание (Марк Лутц)

Такие известные компании, как Google и Intel, Cisco и Hewlett-Packard, используют язык Python, выбрав его за гибкость, простоту использования и обеспечивае...

26 05 2020 16:55:37

Как удалить непечатаемые символы ASCII из строки в C#

Следующий способ расширения TrimNonAscii удаляет непечатаемые символы ASCII из строки. ... Обратите внимание, что этот метод удаляет много полезных символо...

25 05 2020 3:25:45

Треугольная матрица в C#

В этой статье мы напишем программу C#, чтобы проиллюстрировать нижнюю треугольную матрицу. Что такое нижняя треугольная матрица? Квадратная матрица называе...

24 05 2020 22:15:46

Ассемблер - это просто. Учимся программировать. (Калашников О. А.)

Подробно и доходчиво объясняются все основные вопросы программирования на ассемблере. Рассмотрены команды процессоров Intel, 16- и 32-разрядные регистры, о...

23 05 2020 3:19:41

Добавление и удаление изображений на листе Excel

... Метод InsertPicture вызывает метод Insert для активного листа Picture. Затем он устанавливает свойства изображения Top и Left в Top и Left местоположен...

22 05 2020 20:24:31

Воспроизвести мелодии с определенными частотами в C#

В этом примере показано, как вы можете воспроизводить тоны с заданной частотой и продолжительностью. Когда пользователь нажимает кнопку « Воспроизведение»,...

21 05 2020 3:32:23

Как защитить код Python?

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

20 05 2020 4:15:17

7 практических занятий по программированию в 1С 8.хх (Клюев В.В.)

7 практических занятий по программированию в 1 С 8.хх это пособие для освоения программирования и конфигурирования в системе 1 С: Предприятие 8.хх, на основе...

19 05 2020 18:11:37

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

Пример Вычислить стандартное отклонение в C# использует метод расширения, который вычисляет стандартное отклонение для целых чисел IEnumerable. К сожалению...

18 05 2020 4:28:53

Как открыть и прочитать URL-адрес в Java

Чтение с URL-адреса так же просто, как чтение из входного потока. URL - это аббревиатура Uniform Resource Locator. Java-программы, которые взаимодействуют...

17 05 2020 3:24:17

Как найти слово под мышью в элементе управления RichTextBox в C#

Следующий метод WordUnderMouse возвращает слово под мышью в RichTextBox. В коде используется метод RichTextBox управления GetCharIndexFromPosition, чтобы п...

16 05 2020 13:22:18

Установить положение видео с помощью полосы прокрутки с помощью WPF в C#

Пример Управление видео с помощью WPF MediaElement в C# позволяет вам установить положение видео несколькими способами. Вы можете использовать кнопки Next...

15 05 2020 7:59:59

Эффективность использования топлива в разных единицах в C#

Люди в Соединенных Штатах, Канаде, Соединенном Королевстве и некоторых других местах измеряют эффективность использования топлива в милях на галлон. Как и...

14 05 2020 10:39:17

Переменные и типы данных Python

Переменные используются для хранения информации, на которую нужно ссылаться и манипулировать на компьютерном языке . Они также предоставляют способ маркиро...

13 05 2020 21:50:46

Используйте код WPF для отображения индексов и надстроек в C#

В сообщении Отображение индексов и надстроек в текстовом блоке WPF в C# < / a> Я упомянул, что вы можете создавать индексы и надстрочные индексы в коде WPF...

12 05 2020 3:17:10

Функции в Python

Функция является одной из основных концепций языка программирования. Функции - это «автономные» модули кода, которые выполняют отдельный сервис. Это матема...

11 05 2020 8:28:45

Стабильные встречи в C#

В этом примере предполагается, что у вас есть люди, которые должны зарегистрироваться для ограниченного числа встреч. Каждому человеку разрешается выбирать...

10 05 2020 13:29:56

Метод Substring в C#

Метод Substring в строке C#. Класс возвращает новую строку, которая является подстрокой этой строки. Подстрока начинается с указанного заданного индекса и...

09 05 2020 2:29:29

Модификаторы доступа в Java

Одним из основных принципов объектно-ориентированного программирования является «скрытие информации», что означает, что объекты не раскрывают все их детали...

08 05 2020 18:56:55

Чтение данных Excel в C#

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

07 05 2020 7:37:17

В чем разница между поточной и многопроцессорной обработкой?

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

06 05 2020 15:23:36

Как сделать секундомер в C#

Эта программа представляет собой простой секундомер. Когда вы нажимаете кнопку « Пуск», программа меняет заголовок кнопки на « Стоп» и запускает Timer. По ме...

05 05 2020 7:42:28

Qt 5.3. Профессиональное программирование на C++ (Шлее М.)

  Книга посвящена разработке приложений для Windows, Mac OS X и Linux с использованием библиотеки Qt версии 5.3. Подробно рассмотрены возможности, предостав...

04 05 2020 14:50:24

Разница между capacity() и size() вектора в Java

Разница между capacity() и size() в Java.util.Vector заключается в том, что size() - это количество элементов, которые в настоящее время удерживаются, а ca...

03 05 2020 0:52:16

Анимация изображений в C#

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

02 05 2020 2:54:13

Стандартные исключения в C#

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

01 05 2020 11:37:45

Масштабируйте рисунок, чтобы он соответствовал целевой области в C#

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

30 04 2020 15:35:31

Преобразовать строку в Integer в C#

В этой статье мы напишем программу C# для преобразования строки в Integer с использованием метода Convert.ToInt32() Вывод: 6245...

29 04 2020 19:24:19

Словарь (Dictionary) в Python

Словарь представляет собой тип данных похож на массивы, но работает с ключами и значениями вместо индексов. Словари в Python также называются «сопоставлени...

28 04 2020 16:13:13

Числовые выражения, введенные пользователем в C#

В этом примере показан один способ оценки математических выражений, введенных пользователем во время выполнения. Введите числовое выражение, включающее x и...

27 04 2020 20:47:13

Основы программирования в Embarcadero Delphi (Никита Культин)

Книга представляет собой практическое руководство по программированию в Embarcadero Delphi. В ней представлена технология визуального проектирования и собы...

26 04 2020 22:29:43

Является ли JavaScript функциональным языком программирования?

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

25 04 2020 6:23:33

Отображать образцы шрифтов для всех установленных шрифтов в WPF и C#

Введите образец строки и выберите размер шрифта. Когда вы нажимаете « Показать образцы», выполняется следующий код. Этот код очищает метку имени шрифта в ни...

24 04 2020 19:17:33

Массивы в JavaScript

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

23 04 2020 20:57:50

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

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

22 04 2020 21:23:14

Использование элементов управления Windows Forms, чтобы сделать расширитель в C#

WPF, Silverlight, Metro или все, что Microsoft называет этим материалом, теперь дни имеют несколько полезных элементов управления в пространстве имен Syste...

21 04 2020 17:13:10

События JavaScript DOM

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

20 04 2020 19:43:53


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