Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОПИ6.docx
Скачиваний:
12
Добавлен:
07.02.2016
Размер:
71.6 Кб
Скачать

Міністерство освіти і науки України

Запорізький національний технічний університет

Кафедра програмних засобів

ЗВІТ

з лабораторної роботи №6

з дисципліни «Основи програмної інженерії» на тему:

«Обробка подій клавіатури»

Виконав:

студент групи КНТ-423

Прийняв: Є.М. Федорченко

2014

1 Мета роботи:

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

2 Завдання до роботи:

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

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

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

3 Короткі теоретичні відомості:

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

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

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

Для обробки повідомлень із клавіатури вWindows Forms програмах передбачено три події: Keyup, Keypress, Keydown.

Подія Keyup посилає при відпусканні кнопки на клавіатурі.

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

Подія Keydown посилає при натисканні кнопки на клавіатурі.

4 Тексти розроблених програм:

//Form1.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace lab6.zadanie1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void label1_Click(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

Form2 form2 = new Form2(50);

form2.ShowDialog();

}

private void button2_Click(object sender, EventArgs e)

{

Form2 form2 = new Form2(40);

form2.ShowDialog();

}

private void button3_Click(object sender, EventArgs e)

{

Form2 form2 = new Form2(30);

form2.ShowDialog();

}

private void button4_Click(object sender, EventArgs e)

{

Form2 form2 = new Form2(20);

form2.ShowDialog();

}

private void button5_Click(object sender, EventArgs e)

{

Form2 form2 = new Form2(10);

form2.ShowDialog();

}

}

}

//Form2.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace lab6.zadanie1

{

public partial class Form2 : Form

{

string TargetString = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";

int CurrentIndex;

const int MaxCount = 10;

int count = 0;

Graphics Graph;

Font MyFont = new Font("Arial", 35);

Random Rand = new Random();

DateTime start;

int f = 0;

int sec = 0;

public Form2(int n)

{

Graph = CreateGraphics();

f = n;

InitializeComponent();

timer1.Enabled = true;

}

private void Form2_KeyPress(object sender, KeyPressEventArgs e)

{

if ((count > 0) && (e.KeyChar == TargetString[CurrentIndex]))

{

if (count == MaxCount)

{

int time = DateTime.Now.Subtract(start).Seconds;

MessageBox.Show("Время выполнения = " + time.ToString() + " секунд");

string log = "Время выполнения = " + time.ToString() + " секунд";

FileStream stream = File.Open("result.txt", FileMode.Append, FileAccess.Write);

StreamWriter writer = new StreamWriter(stream);

writer.Write(log + "\r\n");

writer.Flush();

stream.Close();

Close();

}

else

{

Graph.Clear(BackColor);

CurrentIndex = Rand.Next(TargetString.Length);

Graph.DrawString(TargetString[CurrentIndex].ToString(), MyFont, Brushes.Black, 100, 100);

count++;

}

}

else System.Media.SystemSounds.Hand.Play();

}

private void timer1_Tick(object sender, EventArgs e)

{

if (sec == f)

{

if (count != 10)

{

Graph.Clear(BackColor);

CurrentIndex = Rand.Next(TargetString.Length);

Graph.DrawString(TargetString[CurrentIndex].ToString(), MyFont, Brushes.Black, 100, 100);

sec = 0;

}

else

timer1.Enabled = false;

}

else

sec++;

}

private void Form2_Load(object sender, EventArgs e)

{

Graph = CreateGraphics();

start = DateTime.Now;

CurrentIndex = Rand.Next(TargetString.Length);

count = 1;

}

private void Form2_Paint(object sender, PaintEventArgs e)

{

Graph.Clear(BackColor);

Graph.DrawString(TargetString.Substring(CurrentIndex, 1), MyFont, Brushes.Black, 100, 100);

}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)

{

timer1.Enabled = false;

}

}

}

4.2

//FormMain.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Xml.Serialization;

namespace WinForms_AlarmClock

{

public partial class FormMain : Form

{

public WMPLib.WindowsMediaPlayer WMP = new WMPLib.WindowsMediaPlayer();

Timer timerCheckTime = new Timer();

public FormMain()

{

InitializeComponent();

timerCheckTime.Interval = 1000;

timerCheckTime.Tick += new EventHandler(timerCheckTime_Tick);

}

void timerCheckTime_Tick(object sender, EventArgs e)

{

for (int i = 0; i < this.listViewAlarm.Items.Count; i++)

{

if (((AlarmClock)this.listViewAlarm.Items[i].Tag).Check())

{

CreateMessage(((AlarmClock)this.listViewAlarm.Items[i].Tag));

}

}

}

private void CreateMessage(AlarmClock ac)

{

FormMessage frmMsg = new FormMessage(this, ac.Message);

frmMsg.Show();

if (File.Exists(ac.MusicFile))

{

WMP.URL = ac.MusicFile;

WMP.settings.volume = 100;

WMP.controls.play();

}

}

public void StopMusic()

{

WMP.controls.stop();

}

#region Обработчики событий загрузки и закрытия окна

//Возникает при каждом завершении работы с формой до того, как она была закрыта

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)

{

//Записываем текущее положение окна в класс глобальных настроек

GlobalSettings.appSettings.MainWindowPosition = this.Location;

//Записываем размер окна

GlobalSettings.appSettings.MainWindowsSize = this.Size;

//Сохраняем настройки. Наведи курсор мыши на метод Save и прочитай всплывающую подсказку.

//Потом щёлкни на методе в любом месте и нажми F12 и перейдёшь в метод, заодно увидишь, как

//сделана та самая подсказка

GlobalSettings.Save();

}

//Происходит при каждой загрузке данной формы

private void FormMain_Load(object sender, EventArgs e)

{

//Загрузить настройки приложения

if (GlobalSettings.Load()) //если загрузили

{

//нашей форме присваиваем координаты из настроек, после загрузки этих настроек из файла

this.Location = GlobalSettings.appSettings.MainWindowPosition;

//тут размер окна получаем из настроек

this.Size = GlobalSettings.appSettings.MainWindowsSize;

}

if (File.Exists(GlobalSettings.appSettings.AlarmClockSaveFile))

LoadAlarmClocks(ref this.listViewAlarm, GlobalSettings.appSettings.AlarmClockSaveFile);

}

#endregion

#region Обработчики событий нажатий по кнопкам: Добавить, Удалить, Проверить

//Создать новый будильник и добавить в список

private void btnNew_Click(object sender, EventArgs e)

{

FormAddAlarmClock formNewAlarm = new FormAddAlarmClock();

if (formNewAlarm.ShowDialog() == System.Windows.Forms.DialogResult.OK)

{

AlarmClock alarmClock = formNewAlarm.GetAlarmClock();

AddInListView(alarmClock);

SaveAlarmClocks(ref this.listViewAlarm, GlobalSettings.appSettings.AlarmClockSaveFile);

timerCheckTime.Start();

}

}

private void AddInListView(AlarmClock alarmClock)

{

int index = this.listViewAlarm.Items.Add(alarmClock.Message).Index;

this.listViewAlarm.Items[index].SubItems.Add(

alarmClock.TimeAlarm.ToLongTimeString() + " - " + alarmClock.TimeAlarm.ToLongDateString());

this.listViewAlarm.Items[index].Checked = true;

this.listViewAlarm.Items[index].Tag = alarmClock;

}

//Удалить будильник

private void btnRemove_Click(object sender, EventArgs e)

{

if (MessageBox.Show("Вы действительно хотите удалить выбранный будильник?", "Внимание", MessageBoxButtons.YesNo,

MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)

{

foreach (ListViewItem currentItem in this.listViewAlarm.SelectedItems)

{

((AlarmClock)currentItem.Tag).IsEnabled = false;

currentItem.Remove();

SaveAlarmClocks(ref this.listViewAlarm, GlobalSettings.appSettings.AlarmClockSaveFile);

break;

}

if (this.listViewAlarm.Items.Count < 1)

this.timerCheckTime.Stop();

}

}

//Проверить будильник

private void btnTest_Click(object sender, EventArgs e)

{

CreateMessage((AlarmClock)this.listViewAlarm.SelectedItems[0].Tag);

}

#endregion

#region Сохранение и загрузка списка будильников

private void SaveAlarmClocks(ref ListView listView, String SaveFile)

{

AlarmClock[] TArray = new AlarmClock[listView.Items.Count];

for (int i = 0; i < TArray.Length; i++) //получаем ссылки на все будильники в списке

TArray[i] = (AlarmClock)listView.Items[i].Tag;

List<AlarmClock> list = new List<AlarmClock>();

list.Clear();

for (int i = 0; i < TArray.Length; i++)

list.Add(TArray[i]);

XmlSerializer serializer = new XmlSerializer(typeof(List<AlarmClock>));

TextWriter textWriter = new StreamWriter(SaveFile);

serializer.Serialize(textWriter, list);

textWriter.Close();

}

private void LoadAlarmClocks(ref ListView listView, String SavedFile)

{

//Если файл не существует, прервать выполнение метода

if (!File.Exists(SavedFile))

return;

XmlSerializer serializer = new XmlSerializer(typeof(List<AlarmClock>));

TextReader textReader = new StreamReader(SavedFile);

try

{

List<AlarmClock> list = (List<AlarmClock>)serializer.Deserialize(textReader);

for (int i = 0; i < list.Count; i++)

{

AddInListView(list[i]);

}

}

catch (InvalidOperationException)

{

textReader.Close();

}

}

#endregion

}

}

//FormAddAlarmClock.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WinForms_AlarmClock

{

public partial class FormAddAlarmClock : Form

{

public FormAddAlarmClock()

{

InitializeComponent();

DateTime dateTime = DateTime.Now;

dateTime = dateTime.AddMinutes(1.0d);

this.numericUpDownHour.Value = dateTime.Hour;

this.numericUpDownMinute.Value = dateTime.Minute;

this.numericUpDownSeconds.Value = 0;

this.dateTimePicker.Value = dateTime;

}

private void btnSelectFile_Click(object sender, EventArgs e)

{

OpenFileDialog openDialog = new OpenFileDialog();

openDialog.Filter = String.Empty;

openDialog.Filter = "Музыкальные файлы|*.mp3; *.mp2; *.wma; *.wav; *.ogg; *.ogm; *.au; *.aif;" +

"|Все файлы|*.*";

if (openDialog.ShowDialog(this) == DialogResult.OK)

{

this.textBoxFilePath.Text = openDialog.FileName;

}

}

public AlarmClock GetAlarmClock()

{

DateTime date = new DateTime(dateTimePicker.Value.Year, dateTimePicker.Value.Month,

dateTimePicker.Value.Day, (int)this.numericUpDownHour.Value, (int)this.numericUpDownMinute.Value, (int)this.numericUpDownSeconds.Value);

return new AlarmClock(this.richTextBoxMessage.Text,

this.textBoxFilePath.Text, date);

}

private void FormAddAlarmClock_Load(object sender, EventArgs e)

{

}

}

}

//FormMessage.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WinForms_AlarmClock

{

public partial class FormMessage : Form

{

public FormMessage(Form owner, String Message)

{

this.Owner = owner;

InitializeComponent();

this.lblTextMsg.Text = Message;

}

private void btnClose_Click(object sender, EventArgs e)

{

this.Close();

}

private void FormMessage_FormClosing(object sender, FormClosingEventArgs e)

{

if (this.Owner is FormMain)

(this.Owner as FormMain).StopMusic();

}

private void FormMessage_Load(object sender, EventArgs e)

{

}

}

}

4.3

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace lab6.zadanie3

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void textBox1_KeyDown(object sender, KeyEventArgs e)

{

textBox1.Text = e.KeyData.ToString() + " ";

textBox1.Text += e.KeyValue.ToString();

string log = textBox1.Text;

FileStream stream = File.Open("log.txt", FileMode.Append, FileAccess.Write);

StreamWriter writer = new StreamWriter(stream);

writer.Write(log + "\r\n");

writer.Flush();

stream.Close();

}

}

}

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