
- •Лекція 7. Використання стандартних компонентів в проекті План
- •7.1. Відкриття файлу - OpenFileDialog
- •7.2. Збереження файлу - SaveFileDialog
- •7.3. Вибір шрифту - FontDialog
- •7.4. Вибір кольору – ColorDialog
- •7.5. Друкування файлу – PrintDialog
- •7.6. Обробка подій кнопок панелі інструментів
- •7.7. Завершення роботи програми та інші події
- •7.7.1. Завершення роботи програми
- •7.7.2. Обробка події зміни файлу
- •7.7.3. Закриття вікна у заголовку форми
- •7.8. Виведення повідомлень - MessageBox
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++; //подсчет напечатанных страниц
}