Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 07. Стандартні компоненти- модальні вікн...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
75.98 Кб
Скачать

7.3. Вибір шрифту - FontDialog

Стандартний компонент FontDialog дозволяє вибирати шрифт та його параметри для всього тексту. Для цього властивості текстового поля призначається значення, яке повертає властивіть компоненту:

textBox1.Font = fontDialog1.Font;

Код обробника меню Шрифт:

//Меню шрифт

private void шрифтToolStripMenuItem_Click(object sender, EventArgs e)

{

fontDialog1.Font = textBox1.Font;

if (fontDialog1.ShowDialog() == DialogResult.OK)

{

textBox1.Font = fontDialog1.Font;

}

}

7.4. Вибір кольору – ColorDialog

Додамо в меню параметри команду Колір для вибору кольору тексту. В обробник команди додамо виклик діалогу colorDialog.

private void колірToolStripMenuItem_Click(object sender, EventArgs e)

{

if (colorDialog1.ShowDialog() == DialogResult.OK)

textBox1.ForeColor = colorDialog1.Color;

}

Для зміни кольору тексту в редакторі застосуємо властивість ForeColor:

textBox1.ForeColor = colorDialog1.Color;

7.5. Друкування файлу – PrintDialog

Для організації друкування та його налаштування призначені відповідні стандартні компоненти.

Перетягуємо на форму з вікна ToolBox елементи: PrintDocument, PageSetupDialog, PrintPreviewDialog і PrintDialog. Подібно до інших діалогів, вони відображуються на панелі компонентів в середовищі Visual Studio .NET.

При друці формується одна або декілька сторінок, за які відповідає об'єкт PrintDocument.

Елементи управління PageSetupDialog, PrintPreviewDialog і PrintDialog є діалоговими вікнами параметрів сторінок, попереднього перегляду і друку відповідно.

Спочатку у вікні Властивості призначимо для властивості Document елементів PageSetupDialog і PrintPreviewDialog значення властивості Name елементу PrintDocument — printDocument1. Тим самим ми зв'язуємо об'єкт printDocument1, що відповідає за формування сторінок друку, з діалоговими вікнами. Це можна зробити і в коді форми.

Для роботи з друком в бібліотеці .NET Framework застосовується клас System.Drawing.Printing, тому його потрібно підключити на самому початку роботи:

using System.Drawing.Printing;

У класі форми оголошуємо наступні глобальні змінні

int pagesPrinted = 0; //номер поточної сторінки, що друкується

string bufOut = ""; //буфер для виводу тексту

В обробнику команди меню Друкувати спочатку записуємо вміст текстового поля в буфер bufOut для того, щоб можна було обчислити кількість рядків у файлі. Замість цього можна скористатися властивостями файлу.

Потім встановлюємо в 0 кількість надрукованих сторінок.

Далі створюємо об'єкт pd класу PrintDocument.

Команда

pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPages);

встановлює властивості PrintPage поточное значення кількості надрукованих сторінок. Подія PrintPageEventHandler виникає при закінченні кожної сторінки. При цьому для кожної сторінки викликається метод pd_PrintPages.

Потім викликається вікно діалогу друкування.

Лістинг 7.4.

//Друкувати...

private void друкуватиToolStripMenuItem_Click(object sender, EventArgs e)

{

//Організація діалогу друкування

bufOut = textBox1.Text;

this.pagesPrinted = 0;

PrintDocument pd = new PrintDocument();

pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPages);

printDialog1.ShowDialog();

}

Обробник команди меню Попередній перегляд відрізняється від друкування тільки викликом діалогу попереднього перегляду.

Лістинг 7.5.

//==============================================================================

private void попереднійПереглядToolStripMenuItem_Click(object sender, EventArgs e)

{

//попередній перегляд

bufOut = textBox1.Text;

this.pagesPrinted = 0;

PrintPreviewDialog ppd = new PrintPreviewDialog();

PrintDocument pd = new PrintDocument();

pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPages);

ppd.Document = pd;

ppd.ShowDialog();

}

Для друкування однієї сторінки тексту розроблено метод pd_PrintPages. Друкування виконується в графічному режимі, тому сторінка є графічним об'єктом. В цьому методі спочатку обчислюється область друку на сторінці (розміри верхнього і нижнього полів), текст буфера розбивається на рядки і обчислюється кількість рядків. Далі розраховується кількість рядків на сторінці для встановленого шрифта.

Інформація про сторінку знаходиться в об'єкті Graphics.

Лістинг 7.6.

private void pd_PrintPages(object sender, PrintPageEventArgs e)

{

float yPos = 0;

float leftMargin = e.MarginBounds.Left;

float topMargin = e.MarginBounds.Top;

string line = null;

//розбиваємо текст на рядки і обчислюємо їх кількість

string[] split = bufOut.Split(new Char[] { '\n' });

int nLines = split.Length; //число строк

//розраховуємо кількість рядків на сторінці

int linesPerPage = (int)(e.MarginBounds.Height / this.Font.GetHeight(e.Graphics));

int lineNo = this.pagesPrinted * linesPerPage;

//друкуємо кожен рядок з масиву

int count = 0;

while (count < linesPerPage && lineNo < nLines)

{

line = split[count];

yPos = topMargin + (count * this.Font.GetHeight(e.Graphics));

e.Graphics.DrawString(line, this.Font, Brushes.Black, leftMargin, yPos, new StringFormat());

lineNo++;

count++;

}

if (nLines > lineNo)

e.HasMorePages = true;

else

e.HasMorePages = false;

pagesPrinted++; //подсчет напечатанных страниц

}