2.1. Системні події в Windows-додатках
Розглянемо події, що відбуваються при обігу даних у Windows-форм (подійну модель Windows-форм).
Форма і кожен з розташованих на неї елементів керування можуть реагувати на події, що відбуваються при пересуванні курсору мишки, натисненні на клавіші тощо. Для кожної допустимої події може бути автоматично створена заготовка функції-обробника. Така функція викликається для активного елементу, коли відбувається відповідна подія.
Наприклад, для елемента керування Button1, якщо двічі натиснути ліву кнопку мишки на його зображенні в режимі конструювання Windows-форми, створюється обробник події „натиснута кнопка” – заготовка функції такого виду:
private void button1_Click(object sender, EventArgs e)
{
}
Це один з 60 припустимих обробників подій для елемента керування „Кнопка”.
Прикладом події, пов’язаної з наближенням курсору мишки до зображення кнопки є подія MouseMove. Щоб призначити обробник для цієї або якоїсь іншої події, користуйтеся їх списком у вікні „Свойства” закладка „События”.
Середовище .NET містить значну кількість вбудованих подій, доступ до яких здійснюється за їх назвами. Середовище саме прив'язує оброблювача для події та потрібний метод, використовуючи вбудований делегат EventHandler. Оброблювачі подій не можуть повертати нічого, крім void. У них відсутня точка, що могла б слугувати для повернення значення. Оброблювачі повинні приймати два параметри. Перший параметр є посиланням на об'єкт, що генерував подію. Другий параметр повинен бути посиланням на базовий клас .NET System.EventArgs або на похідний клас. Клас EventArgs являє собою загальний базовий клас для всіх повідомлень про події, що відбулися.
Приклад 1
П
родемонструємо
обробку подій на прикладі гри „Невловима
кнопка”.
На формі розташовано напис „Чи задоволені ви ...” і дві кнопки – „Так” та „Ні”. На кнопку „Так” натиснути легко, а кнопка „Ні” відстрибує при наближені курсору.
Створимо новий Windows-додаток і розташуємо на формі дві кнопки Button і напис Label.
Встановлюємо наступні властивості елементів керування і форми:
Для об'єкта Label1 у властивість Text вводимо текст: „Чи задоволені ви даною дисципліною?”. Для кнопок у властивість Text вводимо відповідно „Так” та „Ні”.
Далі клацаємо двічі на кнопці Так. В текст програми вбудовується функція-оброблювач натискання цієї кнопки. Вставляємо в нього наступний код:
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(" Я не маю ніяких сумнівів що саме так :-)");
}
Виділяємо кнопку „Ні”. Відкриваємо вікно „Свойства”. Переходимо у вкладене вікно подій (кнопка „События” і двічі клацаємо в полі MouseMove.
В оброблювачі цієї події зв'язуємо рух миші з координатами кнопки та встановлюємо координати кнопки, куди вона буде повертатися, якщо під час свого руху вийде за зазначену область:
private void button2_MouseMove(object sender, MouseEventArgs e)
{
button2.Top -= e.Y;
button2.Left += e.X;
if (button2.Top < -10 || button2.Top > 150)
button2.Top = 50;
if (button2.Left < -80 || button2.Left > 250)
button2.Left = 150;
}
