Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

M_OPI_LR2011_ch2m2

.pdf
Скачиваний:
3
Добавлен:
07.02.2016
Размер:
8 Мб
Скачать
☆

11

2 Л А Б О Р А Т О Р Н А Р О Б О Т А № 6 О Б Р О Б К А П О Д ІЙ К Л А В ІА Т У Р И

2.1 Мета роботи

Навчитися основним принципам обробки подій клавіатури в се­ редовищі Visual Studio.

2.2 Основні теоретичні відомості

2.2.1 Робота з клавіатурою

Усі комерційні додатки повинні мати можливість виконати будь-яку команду, як за допомогою миші, так і за допомогою клавіа­ тури.

2.2.2 Повідомлення лавіатури

Для обробки повідомлень із клавіатури в Windows Forms про­ грамах передбачено чотири події: KeyUp, KeyPress, KeyDown, PreviewKeyDown.

Подія KeyUp посилає при відпусканні кнопки на клавіатурі. Подія KeyPress посилає перший раз при натисканні кнопки на

клавіатурі разом з подією KeyDown і потім може посилати необмеже­ не число раз, якщо користувач утримує клавішу в натиснутому стані. Частота посилки події KeyPress залежить від настроювань операційної системи. Подія KeyDown посилає при натисканні кнопки на клавіату­

р і.

Виконується перед подією KeyDown при натисканні кнопки, ко­ ли елемент управління має фокус.

Для прикладу створимо програму, яка буде обробляти натис­ кання клавіш і виводити на екран інформацію про те, яка клавіша була натиснута. Для цього створіть нове Windows Forms програму з іменем Keyboardapp. Змініть властивості створеної форми:

-Text - «Інформація про натиснуті клавіші»;

-KeyPreview - True.

13

if (7 .Shift){ textBox1.Text +="Shift+";

}

// 3747-i4ROA@ m < 9ас<б9уса к+а-іва Alt

//

r ?n @ сак,

C7

заз<буоА@ у 3@+7 6+@-@ Alt

If

(e.Alt){

+=

"Alt+";

textBox1.Text

}

 

 

 

//к@зіюоА@ KeyData 9ас<б9ус@ї к+а-іві

Keys key = e.KeyData;

//-<тяга0А0 з да9<х 34@ 9ас<б9усу к+а-іву

//код< 6<6C7A9<x к9030к, сак<х як

//Ctrl, Shift, Alt

key &= ~keys.Control; key &= ~keys.Shift; key &= ~keys.Alt;

// -<-08<A0 0С4<Аа97 6+0-0630+уМ799Я textBox1.Text += key.ToString();

2.2.3 Клас Keyeventargs

Клас KeyEventArgs містить усю інформацію про натиснуту кла­ вішу. Властивості, які звичайно використовуються при обробці натис­ кання кнопки:

-Alt - true, якщо натиснута клавіша Alt;

-Control - True, якщо натиснута клавіша Ctrl;

-Shift - True, якщо натиснута клавіша Shift;

-KeyCode - код натиснутої клавіші;

-KeyData - сукупність кодів натиснутих клавіш;

-KeyValue - десяткове значення властивості KeyData;

-H ndtad - прапорець, що вказує, чи було повідомлення оброб­ лено. За замовчуванням, значення Handled рівно false. Якщо ви не пра­ гнете подальшої обробки натискання кнопки, виставте прапор Handled

вtrue.

Для виводу на екран інформації про натиснуті керуючі клавіші ми перевіряємо значення властивостей Alt, Ctrl і Shift. Якщо одна із клавіш натиснута, то в поле Textbox додається відповідне слово.

Для того щоб вивести на екран інформацію про основну натиснуту клавішу, ми повинні попередньо вилучити з поля KeyData систе­ мну інформацію. Тому ми скидаємо в 0 прапори керуючих клавіш властивості KeyData.

16

2.2.7 Структура DateTime

Структура DateTime призначена для зберігання й обробки змін­ них у форматі дати або часу. Структура DateTime настільки універса­ льна, що її використовують і при роботі з рядками, і при роботі із чис­ лами, і при роботі з базами даних. Структура DateTime має окремі властивості для кожної категорії часу (рік, місяць, число, година, хви­ лина, секунда, милі секунда). Крім того, DateTime має набір методів для обробки тимчасових інтервалів. Наприклад, можна скласти два тимчасові значення, відняти, конвертувати в інший формат і т.д.

2.2.8 Формат рядку часу

Дуже важливою особливістю структури DateTime є можливість перекладу тимчасового значення в строковий формат. При цьому фо­ рмат рядка, що вертається, може бути заданий динамічно. Метод DateTime.ToString повертає рядок часу на підставі формату аргументу. От деякі константи, що визначають формат рядка часу:

-dd - два знаки дня місяця. Якщо день складається з однієї ци­ фри - спереду ставиться незначний 0;

-dddd - день тижня;

-MM - номер місяця (1-12);

-ММММ - назва місяця;

-УУУУ - номер року;

-hh - кількість годин (1-12);

-H H - кількість годин (1-24);

-mm - кількість хвилин;

-ss - кількість секунд.

Крім того, рядок формату може містити будь-які розділові сим­ воли для зручності представлення. Приклади формату часу наведено у табл. 2.1.

17

Таблиця 2.1 - Формат часу

Формат

Значення

dd ММММ уууу HH:mm:ss

21 листопада 2002 14:48:56

dd.MM.yyyy HH:mm

21.11.2002 14:48

Сьогодні dd ММММ уууу року

Сьогодні 21 листопада 2002 року

Як видно з таблиці, формат часу може бути дуже зручно підбу­ дований під конкретне завдання.

2.3 Завдання до роботи

2.3.1Ознайомитися з основними теоретичними відомостями за темою роботи, використовуючи ці методичні вказівки, а також реко­ мендовану літературу.

2.3.2Вивчити основні принципи роботи з клавіатурою та часом.

2.3.3Виконати наступні завдання:

1.Реалізувати програму «клавіатурний тренажер». У про­ грамі на екран видається певний символ, який треба ввес­ ти, та таймер для його вводу. Передбачити 5 ступенів важкості - регулювання відведеного часу та кількості лі­ тер, слів для вводу. Також передбачити таблицю найкра­ щих результатів, з можливістю автоматичного запису та зчитування з файлу. Крім того реалізувати зберігання та завантаження прогресу користувача.

2.Реалізувати програму «будильник». Надати можливість виставляння сигналу на конкретний час, дату, день тижня, та коротке повідомлення. Інформацію про виставлені ре­ жими роботи зберігати у файлі.

3.Реалізувати «конвертер». Фіксувати кожне натискання клавіш клавіатури, та виводити на екран відповідний код натиснутої клавіші. Зберігати лог роботи програми у фай­ лі у вигляді: код натиснутої клавіші - назва клавіші.

2.3.4Оформити звіт з роботи.

2.3.5Відповісти на контрольні питання.

18

2.4 Зміст звіту

2.4.1Тема та мета роботи.

2.4.2Завдання до роботи.

2.4.3Короткі теоретичні відомості.

2.4.4Результати виконання роботи.

2.4.5Висновки, що містять відповіді на контрольні запитання (5 шт. за вибором студента), а також відображують результати вико­ нання роботи та їх критичний аналіз.

2.5 Контрольні запитання

2.5.1Назвіть основні події клавіатури.

2.5.2Що містить клас KeyEventArgs?

2.5.3Як отримати інформацію о натисканні керуючих клавіш?

2.5.4Для чого використовують метод ToString?

2.5.5Назвіть основні властивості компоненту Timer.

2.5.6Назвіть основні властивості компоненту DateTimePicker.

2.5.7Для чого призначена структура DateTime?

2.5.8Для чого призначена структура TimeSpan?

2.5.9Вкажіть формат для виводу дати «2002-21-11 GMT+2 14:48:12.87»?

2.5.10Як отримати поточний час?

19

3 Л А Б О Р А Т О Р Н А Р О Б О Т А № 7 Р О Б О Т А З З О Б Р А Ж Е Н Н Я М И

3.1 Мета роботи

Навчитися працювати із зображення за допомогою С#.

3.2 Основні теоретичні відомості

3.2.1 Особливості GDI+

Для малювання об'єкту у Windows Forms програмі мови С# міс­ тить дуже багатий набір методів. Простір імен Drawing містить мно­ жину об'єктів, які полегшують програмістові роботу із графікою. Спе­ ціально для .NET платформи розроблювачі Microsoft розробили GDI+ бібліотеку, значно підвищивши можливості GDI (Graphic Device Inter­ face). GDI+ включає можливості малювання найпростіших об'єктів (лінії, еліпси), малювання різних об'єктів 2D графіки, відображення файлів різних графічних форматів (bmp, jpeg, gif, wmf, ico, tiff) і бага­ то чого іншого. Ми розглянемо роботу з найпростішими об'єктами для малювання: лініями, окружностями, шрифтами.

3.2.2 Малювання об'єктів

Малювання графічних примітивів розглянемо на прикладі про­ грами.

Для малювання лінії вам необхідно буде два рази клацнути ми­ шею в різних частинах вікна. При цьому лінія намалюється від коор­ динати, у якій відбулося перше клацання мишею в координату, де від­ булося друге клацання мишею. Це нетипово для графічного редакто­ ра. Звичайно лінія тягнеться від координати першого клацання миші за курсором доти, поки користувач не відпустить кнопку. Але така функціональність може ускладнити код програми. Для наших навча­ льних цілей ми обійдемося двома клацаннями курсору миші.

Малювання еліпсів аналогічно малюванню ліній. Перше кла­ цання миші буде задавати ліву верхню координату еліпса, а другий - праву нижню координату.

20

Малювання тексту. При клацанні миші рядок тексту буде відо­ бражатися праворуч від курсору.

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

3.2.3 Малювання олівцем

Відкрийте з вікна SolutionExplorer форму Form2. Ця форма опи­ сує дочірнє вікно нашої програми. Саме в класі Form2 нам необхідно написати код, який дозволить малювати графічні примітиви.

У нас у програмі вже присутній оброблювач події MouseDown. Вам необхідно додати оброблювачі для подій MouseMove і MouseUp. Зробіть це, клацнувши два рази по відповідних до полів на закладці подій у вікні властивостей. Той код, який у вас був присутній в оброб­ лювачі події MouseDown, нам більше не знадобиться. Ви можете ви­ лучити його або закоментувати.

Змініть код оброблювачів подій так, як представлено нижче:

private void Form2_MouseDown (object sender, System.windows.Forms.MouseEventArgs e)

{

Form1 arentorm = (Form1)MdiParent; switch(parentorm.currentTool){ case Tools.LINE:

//Drawline (new Point (e.X, e.Y)); break;

case Tools.ELLIPSE:

//Drawellipse (new Point (e.x, e.Y)); break;

Case Tools.TEXT :

//Drawtext(new Point(e.X, e.Y)) ; break;

case Tools.PEN:

// встановлюємо прапор для початку малювання олівцем drawPen = true;

break;

}

// запам'ятовуємо першу крапку для малювання

PreviousPoint.X = e.X; PreviousPoint.Y = e.Y;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]