Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 02.10.2010
Сообщений: 34
.NET 3.x

печать из listbox

16.07.2011, 13:24. Показов 6381. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делала печать из listbox. Но печатает только первую строчку. Подскажите, пожалуйста, в чем ошибка?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
        private void напечататьToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (printDialog1.ShowDialog() == DialogResult.OK)
            {
                printDocument1.DocumentName = Text;
                //Определяем диапазон страниц для печати
                stringPrintText = listBox1.Text;
                StartPage = 1;
                NumPages = printDialog1.PrinterSettings.MaximumPage;
                PageNumber = 1;
                //Вызываем встроенный метод для начала печати
                printDocument1.Print();
            }
        }
 
        private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
        {
            //Создаем экземпляр graph класса Graphics
            Graphics graph = e.Graphics;
            //Создаем объект font, которому устанавливаем 
            // шрифт элемента rtbText
            Font font = listBox1.Font;
            //Получаем значение межстрочного интервала - высоту шрифта Т1, 134
            float HeightFont = font.GetHeight(graph);
            //Создаем экземпляр stringformat класса StringFormat для определения 
            //дополнительных параметров форматирования текста.
            StringFormat stringformat = new StringFormat();
            //Создаем экземляры  rectanglefFull и rectanglefText класса RectangleF для 
            //определния областей печати и текста. Т1, 104
            RectangleF rectanglefFull, rectanglefText;
            //Создаем переменные для подсчета числа символов и строк.
            int NumberSymbols;
            //В качестве области печати устанавливаем объект rectanglefFull
            if (graph.VisibleClipBounds.X < 0) rectanglefFull = e.MarginBounds;
            else
                //Определяем   объект  rectanglefFull
                rectanglefFull = new RectangleF(
                    //Устанавливаем координату  X  
                    e.MarginBounds.Left - (e.PageBounds.Width - graph.VisibleClipBounds.Width) / 2,
                    //Устанавливаем координату  Y
                    e.MarginBounds.Top - (e.PageBounds.Height - graph.VisibleClipBounds.Height) / 2,
                    //Устанавливаем ширину области
                    e.MarginBounds.Width,
                    //Устанавливаем высоту области
                    e.MarginBounds.Height);
            rectanglefText = RectangleF.Inflate(rectanglefFull, 0, -2 * HeightFont);
            //Определяем число строк
            int NumDisplayLines = (int)Math.Floor(rectanglefText.Height / HeightFont);
            //Устанавливаем высоту области
            rectanglefText.Height = NumDisplayLines * HeightFont;
            stringformat.Trimming = StringTrimming.EllipsisCharacter;
            stringformat.FormatFlags |= StringFormatFlags.NoWrap;
 
            //При печати выбранных страниц переходим к первой стартовой странице
            while ((PageNumber < StartPage) && (stringPrintText.Length > 0))
            {
                NumberSymbols = SymbolsInLines(stringPrintText, NumDisplayLines);
                stringPrintText = stringPrintText.Substring(NumberSymbols);
                //Увеличиваем число страниц 
                PageNumber++;
            }
            //Если длина строки stringPrintText равняется нулю (нет текста для печати),
            // Останавливаем печать
            if (stringPrintText.Length == 0)
            {
                e.Cancel = true;
                return;
            }
            //Выводим (рисуем) текст для печати - stringPrintText, используем для этого шрифт font,
            //кисть черного цвета  - Brushes.Black, область печати - rectanglefText,
            //передаем строку  дополнительного форматирования stringformat
            graph.DrawString(stringPrintText, font, Brushes.Black, rectanglefText, stringformat);
            //Получаем текст для следующей страницы
            NumberSymbols = SymbolsInLines(stringPrintText, NumDisplayLines);
            stringPrintText = stringPrintText.Substring(NumberSymbols);
            //Очищаем объект stringformat, использованный для формирования полей.
            stringformat = new StringFormat();
            //Добавляем  вывод на каждую страницу ее номер
            stringformat.Alignment = StringAlignment.Far;
            graph.DrawString("Страница " + PageNumber, font, Brushes.Black, rectanglefFull, stringformat);
            PageNumber++;
            //Cнова проверяем, имеется ли текст для печати и номер страницы, заданной для печати
            e.HasMorePages = (stringPrintText.Length > 0) && (PageNumber < StartPage + NumPages);
            //Для печати из окна предварительного просмотра  снова инициализируем переменные
            if (!e.HasMorePages)
            {
                stringPrintText = listBox1.Text;
                StartPage = 1;
                NumPages = printDialog1.PrinterSettings.MaximumPage;
                PageNumber = 1;
            }
        }
 
        int SymbolsInLines(string stringPrintText, int NumLines)
        {
            int index = 0;
            for (int i = 0; i < NumLines; i++)
            {
                index = 1 + stringPrintText.IndexOf('\n', index);
                if (index == 0)
                    return stringPrintText.Length;
            }
            return index;
        }
 
        private void параметрыСтраницыToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pageSetupDialog1.ShowDialog();
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.07.2011, 13:24
Ответы с готовыми решениями:

Печать из ListBox
Здравствуйте. Суть проблемы в том,что печать элементов из Memo мог организовать,а из ListBox не получается. Звёздочками &quot;*&quot;...

Печать строк из ListBox
Здравствуйте, мне нужно распечатать строки из формы моей в listbox`e, не могу разобраться как это сделать. Подскажите пожалуйста,...

Печать файлов, содержащихся в listbox
подскажите пожалуйста как вывести на печать сразу все файлы, пути которых записаны в listbox?

8
Level 2
 Аватар для FakiR
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
16.07.2011, 16:44
C#
1
stringPrintText = listBox1.Text;
думаю здесь, т.к. вы присвоили только то что отображается в данный момент в компоненте

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void напечататьToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (printDialog1.ShowDialog() == DialogResult.OK)
            {
                printDocument1.DocumentName = Text;
                //Определяем диапазон страниц для печати
                stringPrintText = ListBoxText();
                StartPage = 1;
                NumPages = printDialog1.PrinterSettings.MaximumPage;
                PageNumber = 1;
                //Вызываем встроенный метод для начала печати
                printDocument1.Print();
            }
        }
 
private string ListBoxText() //Метод который возвращает содержимое ListBox'а
        {
            string temp = "";
            for (int i = 0; i < listBox1.Items.Count; i++)
                temp += listBox1.Items[i] + "\n";
            return temp;
        }
Думаю как то так надо сделать.
1
1 / 1 / 0
Регистрация: 02.10.2010
Сообщений: 34
16.07.2011, 17:09  [ТС]
Спасибо большое! Еще вопрос. А как делать в листбоксе разбиение на страницы при печати?
0
Level 2
 Аватар для FakiR
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
16.07.2011, 17:17
Цитата Сообщение от Nadia94 Посмотреть сообщение
Спасибо большое!
Не за что.

Цитата Сообщение от Nadia94 Посмотреть сообщение
Еще вопрос. А как делать в листбоксе разбиение на страницы при печати?
А вот этого я, к сожалению, не знаю.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
16.07.2011, 17:43
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public Form1 ( ) {
    // Обязательно подключиться к событиям printDocument1:
    // BeginPrint и EndPrint
}
 
private void button1_Click ( object sender, EventArgs e ) {
    // Добавление элементов
    for ( int i = 0; i < 15; ++i )
        listBox1.Items.Add( "Item #" + i );
}
 
int printed = 0;
 
private void printDocument1_PrintPage ( object sender, PrintPageEventArgs e ) {
    var g = e.Graphics;
 
    // max высота текста
    int max_height = e.PageBounds.Height;
    int height = 0; // Отпечатано по высоте
    int temp; // Размер одной строки
 
    for ( ; printed < listBox1.Items.Count; ++printed ) {
        temp = TextRenderer.MeasureText( (string)listBox1.Items[printed], this.Font ).Height;
 
        if ( height + temp + 5 > max_height )
            break;
 
        g.DrawString(
            (string)listBox1.Items[printed],
            this.Font,
            Brushes.Black,
            new Rectangle(
                e.PageBounds.X,
                height,
                e.PageBounds.Width,
                temp
            )
        );
 
        height += temp + 5;
    }
 
    e.HasMorePages = printed != listBox1.Items.Count;
}
 
private void button2_Click ( object sender, EventArgs e ) {
    // Печать
    printDocument1.Print();
}
 
private void printDocument1_BeginPrint ( object sender, PrintEventArgs e ) {
    if ( printed != 0 )
        e.Cancel = true;
}
 
private void printDocument1_EndPrint ( object sender, PrintEventArgs e ) {
    printed = 0;
}
1
1 / 1 / 0
Регистрация: 02.10.2010
Сообщений: 34
16.07.2011, 19:19  [ТС]
A buttonclick1 и buttonclick2 - это что за события? События на клик куда?
0
 Аватар для umnick_kh
311 / 249 / 44
Регистрация: 06.12.2010
Сообщений: 527
16.07.2011, 19:26
Nadia94, это две кнопки и события клика для них.
0
1 / 1 / 0
Регистрация: 02.10.2010
Сообщений: 34
16.07.2011, 19:54  [ТС]
Я понимаю, что две кнопки. У меня просто одна кнопка печати. И я не понимаю зачем вторая и что каждая из них делает.
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
16.07.2011, 22:10
but1 добавляет элемент, but2 производит печатать
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2011, 22:10
Помогаю со студенческими работами здесь

Вывод на печать из textbox(listbox,richtextbox )
Приветствую. Скажите можно ли как сделать вывод на печать текста из textbox(listbox,richtextbox ), облазил интернет толкового нечего не...

Нужно значения listbox преобразовать в переменные и отправить на печать
Есть программа, которая работает по типу кассы и печатает чеки Нужно чтобы в чек добавлялись значения из Listbox и заносились в чек с...

Вывод на печать DBGrid из TabSheet на печать в файл ворда
Здравствуйте, не могли бы помочь с выводом на печать? В делфи 10 подключена база и информация выводится в DBGrid на TabSheet. Необходимо...

Если а+b*с=0 то печать a иначе печать 'no'. Написать программный код
написать код если а+b*с=0 то печать a иначе печать 'no'

Выбранный элемент ListBox одной формы перенести в ListBox на другую форму
проблема такая: в программе(в форме Form1) должна по нажатию кнопки открываться 2-я форма, в которой есть listbox и 2 кнопки: закрыть и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru