- •Лекція 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.6. Обробка подій кнопок панелі інструментів
Кнопки панелі інструментів дублюють відповідні команди меню. І кнопки і команди меню генерують власні події, наприклад, Click.
Для того, щоб не дублювати код обробників можна:
1. Написати закритий метод класу, який реалізує обробку події і викликати цей метод з обробника меню і обробника кнопки. Цей спосіб ми застосовували для відкриття і збереження файлу.
2. Застосувати делегати. Тут делегати відіграють роль покажчиків на функцію.
Наприклад, обробник меню Про програму має вигляд:
//Довідка про програму - власна форма
private void мояДовідкаToolStripMenuItem_Click(object sender, EventArgs e)
{
//створення об'єкту класу і записк форми як модального діалогу
MyHelp myform = new MyHelp();
myform.ShowDialog();
}
Обробник кнопки на панелі інструментів містить тільки посилання на потрібний обробник
//кнопка Help - виклик власного вікна про програму
private void helpToolStripButton_Click(object sender, EventArgs e)
{
мояДовідкаToolStripMenuItem_Click(this, new EventArgs());
}
Делегат використовується і для роботи з новим файлом – команда меню Новий.
Лістинг 7.7.
//Обробники подій Click при виборі команд меню
//новий документ
private void новийToolStripMenuItem_Click(object sender, EventArgs e)
{
//меню Новий документ
if (docChanged)
{
DialogResult dr;
dr = MessageBox.Show(
"Зберегти зміни?", "NkEdit",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning);
switch (dr)
{
case DialogResult.Yes:
if (SaveDocument() == 0)
{
textBox1.Clear();
docChanged = false;
}
break;
case DialogResult.No:
textBox1.Clear();
docChanged = false;
break;
case DialogResult.Cancel:
//
break;
};
}
}
В обробнику кнопки панелі інструментів використовується делегат – показчик на обробник меню
//Кнопка Новий - new
private void newToolStripButton_Click(object sender, EventArgs e)
{
//виклик обробника меню Новий, генеруємо нову подію
новийToolStripMenuItem_Click(this, new EventArgs ());
}
7.7. Завершення роботи програми та інші події
7.7.1. Завершення роботи програми
Вихід з програми виконується при виборі команди меню Вихід. При цьому потрібно перевірити, чи збережені останні зміни у файлі.
Лістинг 7.8.
//Вихід
//Обробник команди меню Вихід - завершення роботи програми
private void вихідToolStripMenuItem_Click(object sender, EventArgs e)
{
//Завершення роботи - перевірити чи збережені зміни у файлі
if (docChanged)
{
DialogResult dr;
dr = MessageBox.Show("Зберегти зміни?", "NkEdit",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning);
switch (dr)
{
case DialogResult.Yes:
SaveDocument();
this.Close();
break;
case DialogResult.No:
this.Close();
break;
case DialogResult.Cancel:
// відмінити закриття вікна програми
break;
};
}
this.Close();
}
